装配bean
三种装配bean方式
第一种:自动化装配bean
· 组件扫描(component scanning):Spring会自动发现应用上下文所创建的bean。
@Component注解。这个简单的注解表明该类会作为组件类,并告知Spring要为这个类创建bean。组件扫描默认是不启动的,需要显示配置Spring,利用@ComponentScan默认会扫描与配置类相同的包下的@Component注解。
Spring应用上下文中所有的bean都会给定一个ID,默认是将类名的第一个字母变为小写。如果想自定义:方法一:那就将期望的id值传递给@Component注解;方法二:使用Java依赖注入规范中的@Named注解设置ID。
设置组件扫描的基础包,@ComponentScan默认是以配置类所在的包扫描组件。自定义有:方法一:在@ComponentScan的value属性中指明包的名称。方法二:或者basePackages属性设置,可以设置多个,设置成一个数组即可。@ComponentScan也可以扫描包中的类或接口,使用basePackageClasses属性所设置的类,这些类所在的包将会是组件扫描的基础包。
· 自动装配(autowiring):Spring自动满足bean之间的依赖
实现自动装配方法有:方法一:@Autowired注解,该注解不仅可以用在构造器上,还可以用在setter方法上,可以用在类的任何方法上。如果没有匹配的bean,那么在应用上下文创建的时候Spring会抛出异常,避免于此,可以将required属性设置为false。与@Autowired注解功能相似的有@Inject来源于Java依赖注入规范。
第二种:Java代码装配bean
·在需要将第三方库中的组件装配到应用中,是无法使用@Component和@Autowired注解进行自动化装配的。所以需要显示装配:Java和xml。最好java装配代码不要包含业务逻辑,也不要侵入到业务逻辑代码中。
显式配置Spring方法有三种
First:创建配置类。@Configuration注解:表明这个类是配置类,该类包含在Spring应用上下文中如何创建bean的细节。
Second:声明bean。@Bean注解:告诉Spring这个方法返回一个对象,该对象注册为Spring应用上下文中的bean,方法体中包含了最终产生bean实例的逻辑。默认情况下,bean的ID与注解的方法名是一样的,如果想自定义可以通过属性name重命名。
总结:@Bean注解的方法可以采用任何必要的Java功能产生bean实例,构造器和setter方法只是两个简单样例。
Third:借助JavaConfig实现注入,最简单的方式:引用创建bean的方法。默认情况下,Spring中的bean都是单例的,所以可以将一个实例注入到任意数量的其他bean之中。通过调用方法来引用bean方式会有点令人困惑,所以可以将需要注入的类作为参数。
由于本人喜欢Java配置所以xml配置没有总结。
导入,混合配置
· 在JavaConfig中引用XML配置
使用@ImportResource注解将xml文件导入到JavaConfig中
导入JavaConfig:方法一:在一个JavaConfig中使用@Import注解导入JavaConfig;方法二:创建一个更高级别的javaConfig,使用@Import注解将两个配置类组合起来。
· 在XML配置中引用JavaConfig
<import>导入其他XML配置文件。不能导入JavaConfig类;可以通过<bean>配置JavaConfig。
总结:Spring框架的核心是Spring容器。容器负责管理应用中组件的生命周期,他会创建这些组件并保证它们的依赖能够得到满足,让组件完成任务。尽可能使用自动化配置,避免不了显式配置,优先选择Java配置,因为更加强大,类型更安全,易于重构。