第二章:装配Bean


2.1:Spring装配Bean的可选方案
编程人员需要让DI知道如何那些依赖关系需要被解决,编程人员可以通过,java配置、xml配置、Spring组件扫描自动装配的方法完成,也可以混合使用。本书建议使用的配置顺序是:自动扫描注入、java配置、xml配置。
2.2:自动化装配Bean
使用@Component注解修饰一个类后,Spring将认为这个类需要被ApplicationContext管理为Bean(前提是使用ComponentScan开启可组件扫描)。ComponentScan可是用在java配置文件中和xml配置文件中。使用@Autowired注解修饰任何方法将引起Spring为该方法在上下文中寻找合适的依赖,如果匹配多个或者没有匹配到会抛异常。
使用@Component修饰的组件
@Component //默认组件ID为类名首字母小写,可以使用@Component("自定义组件ID")
java普通类{
@Autowired
方法(依赖类 依赖对象){}
}
java配置文件开启组件扫描:
@JavaConfig
@ComponentScan //默认的扫描包为本类所在包,可以使用ComponentScan(basePackages="包A")、ComponentScan(basePackages={"包A",包B})、ComponentScan(basePackages={类A.class,类B.class})的方式指定别的包。
java配置类{}
xml配置文件中开启组件扫描:
<beans>
<context:component-scan base-package="..."/>
</beans>
2.3:通过java代码装配Bean
使用@Configuration修饰的java类为Spring中java配置类,这个类只是使用java语言描述配置信息,不要将业务逻辑写进去。通过使用@Bean修饰方法来描述Bean。这个方法返回的对象将作为Bean注册到上下文中,方法名为Bean的ID。在别的Bean方法中可以直接调用该bean方法实现依赖注,也可以在方法中申明需要注入的类型参数实现依赖注入。被@Bean修饰的方法被调用时会被拦截,直接从上下文中找到实例注入。使用java配置可以在bean方法中编写任何java代码,功能强大。
使用@Configuration修饰的java配置类
@Configuration
public class 配置类名{
@Bean
public 类型1 方法名A(){
return 返回类实例;
}
//使用调用Bean方法实现注入,Bean方法会被拦截直接返回需要上下文中的实例。
@Bean
public 类型2 方法名B(){
return new 类型2(方法A);
}
//通过参数声明实现注入,Spring根据参数类型自动注入。推荐使用*
@Bean
public 类型3 方法名C(类型1 类型1参数){
return 类型3(类型1参数);
}
}
2.4:通过xml装配Bean
xml配置文件中使用<beans><bean>来声明Bean,<bean>中使用class指定这个Bean的类,使用ID自定义ID。xml配置的方法没有java配置强大,但是基本的配置都可以,如:构造方法中注入别的Bean、构造方法中注入字面值、注入集合、设置属性。Spring3.0引入了C命名空间。
<bean>基本配置
<bean id = "beanID" class ="xxx.yyy.zzz.类"> //不写ID默认生成的是ID是xxx.yyy.zzz.类#1。class中使用全类名。
构造器注入
<bean id = "ID" class = "xxx.yyy.类">
<constructor-arg ref = "别的BeanID">
</bean>
<bean id = "ID" class = "xxx.yyy.类">
<constructor-arg value = "字面值">
</bean>
集合的注入
<bean id = "ID" class = "xxx.yyy.类">
<constructor-arg>
<null>
</constructor-arg>
</bean>
<bean id = "ID" class = "xxx.yyy.类">
<constructor-arg>
<list>
<value>字面值</value>
<value>字面值</value>
</list>
</constructor-arg>
</bean>
<bean id = "ID" class = "xxx.yyy.类">
<constructor-arg>
<list> //也可以是别的集合set map
<ref bean="beanID"/>
<ref bean="beanID"/>
</list>
</constructor-arg>
</bean>
属性注入:
<bean id = "ID" class = "xxx.yyy.类">
<property name = "属性名" ref = "别的Bean"/> //其实是为属性的set方法提供的注入。
</bean>
<bean id = "ID" class = "xxx.yyy.类">
<property name = "属性名" value = "字面值"/>
</bean>
//同样也可以对属性进行注入集合。
2.5:导入和混合配置
???????????????????


原文地址:https://www.cnblogs.com/Xmingzi/p/8990228.html