Spring-5-基于注解的自动装配

本文详细介绍了Spring框架中Bean的注解使用方法,包括@Controller、@Service、@Repository和@Component的适用场景,以及如何通过XML配置自动组件扫描。同时,深入探讨了@Autowired、@Resource、@Inject的区别,以及如何利用@Autowired实现自动装配。


使用注解快速的加入到容器中的步骤:
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: 指定过滤规则

  1. type=“annotation”, 按注解进行排除, 标注了该注解的组件不要(expression: 选定注释的全类名)
  2. type=“assignable”:排除某个具体的类 (expression:指定全类名)
  3. type=“aspectj”:aspectj表达式
  4. type=“custom”:自定义一个TypeFilter;
  5. 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就不行了.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值