1,引入spring-aop 模块
2,使用 <context:component-scan base-package="xxx.yyy" /> 方式开启组件扫描
常用的4种创建Bean的注解:
- @Component
- @Controller
- @Service
- @Repository
3,对组件扫描的一些配置说明
<beans>
<context:component-scan base-package="org.example">
<context:include-filter type="regex"
expression=".*Stub.*Repository"/>
<context:exclude-filter type="annotation"
expression="org.springframework.stereotype.Repository"/>
</context:component-scan>
</beans>
官网的示例,
include-filter 表示接受正则表达式类型,符合expression的类会被扫描;
exclude-filter 表示类型为 @Repository的注解不会被扫描。
4,属性注入
- @Autowired 根据属性类型注入
如果有多个同类型的Bean,注入的时候需要@Qualifier来区分。
- @Qualifier 根据属性名称注入,和 @Autowired 一起使用
- @Resource 可以根据类型,可以根据名称注入。 JDK提供,不是Spring自带。
@Resource //默认根据类型注入
@Resource(name="xx") //根据名称xx注入
- @Value 注入普通类型的属性
@Repository(value = "user1")
public class UserDao {
public void selectUser(){
System.out.println("Select User.");
}
}
@Service
public class UserService {
@Value(value = "xharvard")
private String userName;
@Autowired
private UserDao userDao;
@Resource
private UserDao userDaoForResource;
@Autowired
@Qualifier(value = "user1") // value必须与@Repository(value = "user1") 一致
private UserDao userDaoForQualifier;
public void getUser() {
userDao.selectUser();
System.out.println(userName);
userDaoForResource.selectUser();
userDaoForQualifier.selectUser();
}
}
<?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 https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- 开启自动注解扫描 -->
<context:component-scan base-package="org.xharvard.ioc.annotation"/>
</beans>
测试
public class AnnotationDemo {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("META-INF/context-annotation.xml");
UserService userService = context.getBean("userService", UserService.class);
userService.getUser();
}
}