Spring基于注解+扫描管理bean

@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/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球