自动配置注入 Bean
自动配置的目的
为了使得 Bean 的注入不需要一个一个的配置,可以通过自动配置来简化。
自动配置的实现
为创建为 Bean 的类添加注解
- @Component 一般用在身份不明确的组件上
- @Repository 一般用在数据库访问层--Dao层/Repository层
- @Service 一般用在业务逻辑层--Service层
- @Controller 一般用在控制器层--Controller层
示例
UserBean.java
@Component
public class UserBean {
private String name;
private int age;
@Override
public String toString() {
return "UserBean{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
UserService
@Service
public class UserService {
public void sayHello(){
System.out.println("userService");
}
}
配置包扫描
如果由多个包需要扫描,多个包可以使用,
隔开
在包扫描时,设置属性use-default-filters
,可以按照注解过滤扫描的类
- true 结合 exclude-filter 标签使用,表示去除某个注解
- fase 结合 include-filter 标签使用,表示包含某个注解
XML 配置包扫描示例
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"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="org.daistudy" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
</context:component-scan>
</beans>
应用
ClassPathXmlApplicationContext context = new
ClassPathXmlApplicationContext("applicationContext.xml");UserBean userBean = (UserBean) context.getBean("userBean");System.out.println(userBean);
Java 配置包扫描示例
java配置
@Configuration
@ComponentScan(value = "org.daistudy", useDefaultFilters = false, includeFilters = {
@ComponentScan.Filter(type = FilterType.ANNOTATION, value = Service.class)
})
public class JavaConfig {
}
应用
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("org.daistudy.config");
UserBean userBean = (UserBean) context.getBean("userBean");
System.out.println(userBean);
UserService userService = context.getBean(UserService.class);
userService.sayHello();
结果
Spring 容器中没有 userBean 的 Bean,有 userService 的 Bean。
网友评论