@Component:将类标识为普通组件
@Controller:将类标识为控制层组件
@Service:将类标识为业务层组件
@Repository:将类标识为持久层组件(dao层)
* (4个的效果都是一样,但为代码可读性,不能乱标)
context:exclude-filter:排除扫描
type:设置排除扫描的方式
type=”annotation|assignable”
annotation:根据注解的类型进行排除
expression:需要设置排除的注解的全类名
assignable:根据类的类型进行排除
expression:需要设置排除的类的全类名
context:include-filter:包含扫描( 只扫描,很少用)
注意:需要在context:component-scan标签中设置
use-default-filters=”true”(默认值)
(所设置的包下所有的类都需要扫描,此时可以使用排除扫描)
use-default-filters=”false”
(所设置的包下所有类都不需要扫描,此时才可以使用包含扫描)
通过注解+扫描所配置的的bean的id:
默认值为类的小驼峰,即类名的首字母为小写的结果
* 接口应该写他对应的实现类的小驼峰
可以通过标识组件的value属性值设置bean自定义id:
@Controller(“controller”)
* 可通过这种方式来为其所配置的bean设置特定id(一般不用)
@Autowired:实现自动装配功能的注解*
1.@Autowired注解能标识的位置
1)标识在成员变量上,此时不需要设置成员变量的set方法(最常用)
2)标识在set方法上_
_ 3)标识在为当前成员变量赋值的有参构造上
2.@Autowired实现自动装配的原理
1)默认通过byType的方式,
* 在IOC容器中通过类型匹配某个bean为属性赋值
2)如果有多个类型匹配的bean,
此时会自动转化为byName的方式实现自动装配的效果
* 即将要赋值的属性的属性名作为bean的id匹配某个bean为属性赋值
3)若byType和byName的方式都无法实现自动装配_
_ 即IOC容器中有多个类型匹配的bean
且这些bean的id和要赋值的属性的属性名都不一致_
_ 此时抛出异常NoUniqueBeanDefinitionException
4)此时可以在要赋值的属性上,添加@Qualifier_
_ 通过该注解的value属性值,指定某个bean的id
将这个bean为属性赋值_
_ @Qualifier(“userServiceImpl”)
注意:若IOC容器中没有任何一个类型匹配的bean,
此时抛出异常:NoSuchBeanDefinitionException
在@Autowired注解中有个属性required,默认值为true_
_ 要求必须完成自动装配,可以@Autowired(required = false)
* 此时是能装配则装配,装配不了则使用属性默认值
Original: https://www.cnblogs.com/bieyinan/p/16697159.html
Author: 别亦难
Title: Spring基于注解+扫描管理bean
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/684948/
转载文章受原作者版权保护。转载请注明原作者出处!