1. 一个简单的Spring bean【讲一个对象类以bean的形式交托给Spring管理】
Pom依赖
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.12.RELEASE</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13</version> <scope>test</scope> </dependency> </dependencies>
HelloWorld
package com.luoyu.yibai; /** * @author :luoyu * @version :1.0 * @date : 2022/2/26 9:50 上午 * @description */ public class HelloWorld { private String name; public void setName(String name) { this.name = name; } public void printHello() { System.out.println("Spring 3 : Hello ! " + name); } }
applicationContext.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="helloBean" class="com.luoyu.yibai.HelloWorld"> <property name="name" value="Yiibai" /> </bean> </beans>
App
public class App { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext( "applicationContext.xml"); HelloWorld obj = (HelloWorld) context.getBean("helloBean"); obj.printHello(); } }
2. 采用依赖注入进行松耦合
在Spring框架中,依赖注入(DI)的设计模式是用来定义对象彼此间的依赖。它主要有两种类型:
- Setter方法注入
构造器注入
IOutputGenerator
public interface IOutputGenerator { public void generateOutput(); }
JsonOutputGeneratorpublic class JsonOutputGenerator implements IOutputGenerator{ @Override public void generateOutput() { System.out.println("Json Output Generator"); } }
CsvOutputGeneratorpublic class CsvOutputGenerator implements IOutputGenerator{ @Override public void generateOutput() { System.out.println("Csv Output Generator"); } }
OutputHelperpublic class OutputHelper { IOutputGenerator outputGenerator; public void generateOutput(){ outputGenerator.generateOutput(); } public void setOutputGenerator(IOutputGenerator outputGenerator){ this.outputGenerator = outputGenerator; } }
Spring-Common.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <bean id="OutputHelper" class="com.luoyu.yibai.di.OutputHelper"> <property name="outputGenerator" ref="jsonOutputGenerator" /> </bean> <bean id="csvOutputGenerator" class="com.luoyu.yibai.di.CsvOutputGenerator" /> <bean id="jsonOutputGenerator" class="com.luoyu.yibai.di.JsonOutputGenerator" /> </beans>
Apppublic class App { public static void main( String[] args ) { ApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"Spring-Common.xml"}); OutputHelper output = (OutputHelper)context.getBean("OutputHelper"); output.generateOutput(); } }
3. 自动装配
在Spring中,“类型自动装配”的意思是如果一个bean的数据类型与其它bean属性的数据类型相同,将自动兼容装配它。
public class Person { private Ability ability; //... }
public class Ability { private String skill; //... }
通常情况下,明确地装配 bean:
<bean id="person" class="com.yiibai.common.Person"> <property name="ability" ref="invisible" /> </bean> <bean id="invisible" class="com.yiibai.common.Ability" > <property name="skill" value="Invisible" /> </bean>
也可以进行按照类型装配
<bean id="person" class="com.yiibai.common.Person" autowire="byType" /> <bean id="invisible" class="com.yiibai.common.Ability" > <property name="skill" value="Invisible" /> </bean>
@Autowired注解是通过匹配数据类型自动装配Bean