Spring装配bean的三种方式
Spring装配bean的三种方式
一个项目中可以混用如下三种装配方式,但推荐尽可能少地写显示的配置文件,也就是说推荐使用文中的第三种方式。显示配置尽可能使用类型安全、功能更强大的基于Java文件的装配方式。
基于XML文件的显式装配
较老的方式。
在项目中添加xml文件。文件中有唯一父元素<beans>
。<beans>
中可以嵌套<beans>
或<bean>
元素,定义bean和依赖。
在需要装配集合时,只能用XML这种方式。
示例:
<?xml version="1.0" encoding="UTF-8"?>
<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.xsd">
<bean id="helloService" class="com.service.HelloService">
<property name="addressList">
<List>
<value>INDIA</value>
<value>USA</value>
</List>
</property>
</bean>
</beans>
基于Java文件的显式装配
在SpringBoot中推荐使用的方式。
被@Configuration
注解的类是配置类,其中可以通过在方法上使用@Bean
注解配置bean。
示例:
@Configuration
@ComponentScan(basePackages = "com.package.path")
public class SampleConfig {
@Bean(name = "aa")
public AA aa() {
return new AA();
}
}
隐式bean发现机制和自动装配
用@Component/Service/Controller/Repository
注解(这几个注解没本质区别,不同名称表示bean的不同用途,一般用Component)可以生成被注解类的对应bean,用@Autowired
可以自动装配bean。默认按类型装配,可以使用@Qualifier
注解指定特定bean。
public class Sample {
@Autowired
private AA aa;
private BB bb;
@Autowired
public void setBb(BB bb) {
this.bb = bb;
}
}
此外,要在配置Java类或者XML文件中指明包扫描的路径。
@Configuration
@ComponentScan(basePackages = "com.package.path")
public class SampleConfig {
}
<context:component-scan base-package="com.package.path"/>
除了直接指明包路径(不具备“类型安全”),也可以通过类或接口来指定扫描机制的目标目录。
@Configuration
@ComponentScan(basePackageClasses = {AA.class, BB.class})
public class SampleConfig {
}
如此,IOC容器会扫描AA和BB两个类所在的包。
引用配置文件/类
在JavaConfig中解析XML配置:
通过@Import注解导入其他的JavaConfig,并且支持同时导入多个配置文件;
@Configuration
@Import({AConfig.class, BConfig.class})
public class SampleConfig {
}
通过@ImportResource注解导入XML配置文件;
@Configuration
@Import(AConfig.class)
@ImportResource("classpath: config.xml")
public class SampleConfig {
}
在XML配置文件中应用JavaConfig:
通过<import>标签引入其他的XML配置文件;
通过<bean>标签导入Java配置文件到XML配置文件,例如
<bean class="com.package.path.AConfig" />
参考
- 点赞
- 收藏
- 关注作者
评论(0)