Java方式bean的注入以及自动配置
Java配置
Java配置的本质上,就是使用一个Java类去代替xml配置,这种配置方式在目前最主流的Spring Boot中得到了广泛的使用。
1、引入相关Spring相关依赖
2、创建Java配置类:
/**
* 这是一个Java配置类,它的作用类似于applicationContext.xml配置文件
* @author 叶小陌
*
*/
@Configuration
public class JavaConfig {
/**
* 返回一个JavaBean的方法就类似于applicationContext.xml中的一个bean标签
* <bean class="com.sxt.bean.Book" id="book"/>
* @return
* 默认情况下,id就是方法名,可以通过@bean注解的value或者name属性自定义方法名
*/
@Bean(name="book")
public Book getBook(){
return new Book();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
3、加载Java配置
public class Main1 {
ApplicationContext ac;
@Test
public void test() {
Book book = (Book) ac.getBean(Book.class);
System.out.println(book);
}
@Before
public void before(){
ac = new AnnotationConfigApplicationContext(JavaConfig.class);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
自动配置
xml 配置实现
xml配置,主要通过四个注解,这四个注解,目前来说,功能是一样的:
@Component,一般用在身份不明确的组件上
@Service,一般用在Service层
@controller,一般用在控制层
@Repository,一般用在数据库访问层
然后在xml文件中配置自动扫描:
<context:component-scan base-package="com.sxt.bean"/>
1
如果有多个包需要扫描,多个包使用“,”隔开,也可以直接配置扫描父包。
还可以配置扫描某个注解,如下:
<context:component-scan base-package="com.sxt" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
</context:component-scan>
1
2
3
use-default-filters表示使用使用spring默认提供的过滤器,false表示不使用,true则表示使用。
一般来说,true结合exclude-filter标签使用,表示除去某个注解
false结合include标签使用,表示包含某个注解
注意:Component是另外三个注解(Service、Controller、Repository)的父类。
Java配置实现
Java配置和xml配置基本一致,唯一不同的地方就是包扫描的方式。
四个注解是一样的。
包扫描是通过@ComponentScan来实现:
@Configuration
@ComponentScan("com.sxt.bean")
public class JavaConfig {
}
1
2
3
4
Java配置一样可以实现精确的包扫描:
@Configuration
@ComponentScan(value="com.sxt.bean",useDefaultFilters=false,includeFilters={
@ComponentScan.Filter(type=FilterType.ANNOTATION,value=Service.class)
})
public class JavaConfig {
}
1
2
3
4
5
6
---------------------