使用注解快速的加入到容器中的步骤:
1. 导入aop包, 支持注解模式的;
spring-aop-5.0.8.RELEASE.jar
2. 给要添加的组件上表四个注解的任何一个
3. 告诉Spring, 自动扫描加了注解的组件: 依赖context名称空间
4. 使用@Autowired为组件自动装配bean
spring bean的注解:
- @Controller:控制器:推荐给Controller(servlet)的组件加这个注解
- @Service:业务逻辑:推荐给业务逻辑层的组件添加这个注解
- @Repository:给数据库层(持久化层Dao)的组件添加这个注解
- @Component:给不属于以上几层的组件添加这个注解
注解可以随便加: Spring底层不会去验证你的这个组件, 是否如你所选注释的意思一致

xml中配置自动组件扫描
context:component-scan : 配置自动组件扫描
base-package: 指定扫描的基础包, 把基础包及他下边所有包的所有加了注解的类,自动扫面进ioc.
<context:component-scan base-package=“com.xian”></context:component-scan>
context:include-filter: 指定扫描包时只扫描进入哪些组件, 默认都是全部扫描进来, 需禁用掉默认的过滤规则
use-default-filters="false" : 一定要禁用掉默认的过滤规则
<context:component-scan base-package="com.xian" use-default-filters="false">
指定只扫面哪些组件
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
<context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
</context:component-scan>
**context:exclude-filter: ** 指定扫描包时不包含的类,扫描的时候可以排除一些不要的组件
<context:component-scan base-package="com.xian">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
type: 指定过滤规则
- type=“annotation”, 按注解进行排除, 标注了该注解的组件不要(expression: 选定注释的全类名)
- type=“assignable”:排除某个具体的类 (expression:指定全类名)
- type=“aspectj”:aspectj表达式
- type=“custom”:自定义一个TypeFilter;
- type=“regex”:匹配正则表达式
<context:component-scan base-package="com.xian">
<context:exclude-filter type="assignable" expression="com.xian.servlet.BookServlet"/>
</context:component-scan>
@Autowired注解实现自动装配
@AutoWired原理: 其实在启动spring IoC时,容器自动装载了一个AutowiredAnnotationBeanPostProcessor后置处理器,当容器扫描到@Autowied、@Resource或@Inject时,就会在IoC容器自动查找需要的bean,并装配给该对象的属性.
@AutoWired应用的位置: 类成员变量, 方法, 构造函数。
@AutoWired 默认根据类型查找进行装配, 如果资源类型的bean不知一个, 默认根据@Autowired注释标记的成员标量名作为id查找bean,进行装配, 如果根据成员变量名作为id还是找不到bean,可以使用@Qualifier注释明确指定目标bean的id
@Service
public class BookService {
//required = false : 允许未装配上, 即未装配不报错, 赋值null;
@Autowired(required = false)
@Qualifier("book") //指定一个bean_id, 让Spring不使用变量名查找bean_id
private BookDao bookDao;
public void save() {
System.out.println("bookSrvice正在调用bookDao帮你保存信息");
bookDao.saveBook();
}
}
@Autowired应用于method上:
//此方法会在Spring容器启动时自动运行
@Autowired
public void methodAuto(BookService bookService) {
System.out.println("Soring 运行了这个方法:"+bookService);
}
@Autowired, @Resource, @Inject区别
@Autowired, 最强大:Spring自己的注释
@Resource, j2ee: java 的标准
@Inject, EJB 特定环境下
@Resource:扩展性强, 如果切换成另外一个容器框架, 任然可以使用, @Autowired就不行了.
本文详细介绍了Spring框架中Bean的注解使用方法,包括@Controller、@Service、@Repository和@Component的适用场景,以及如何通过XML配置自动组件扫描。同时,深入探讨了@Autowired、@Resource、@Inject的区别,以及如何利用@Autowired实现自动装配。
2090

被折叠的 条评论
为什么被折叠?



