自动装配:根据指定的策略,在IOC容器中匹配某个bean。自动为bean中的类类型的属性或接口类型的属性赋值
基于.xml:
bean标签的autowire属性进行配置:no和default不自动装配;
byType根据类型匹配(若没找到任何一个类型匹配的bean,不装配使用默认值)(若通过类型找到多个类型的bean,会抛出异常)
byName将要赋值的属性的属性名作为bean的id在IOC容器中匹配某个bean,为属性赋值
基于注解:
①@component:将类标识为普通组件 (将类作为一个bean进行管理)
@Controller:将类标识为控制层组件
@Service:将类标识为业务层组件
@Repository:将类标识为持久层组件
(@component扩展出另外三个注解,使用时其实使用任何一个都可以,使用好可帮我们分清楚组件作用)
②扫描组件<context:component-scan base-package="包名"></context:component-scan>越精确扫描越快
排除扫描(不扫描谁,写于<context:component-scan base-package="包名"></context:component-scan>中)
(annotation通过注解进行排除)
(org-springframework.stereotype.controller不扫描控制层,通过点击注解右键Copy Renference获取):
<context:exclude-filter type="annotation" expression="org-springframework.stereotype.controller"/>
(assignable通过类类型进行排除进行排除,点击类名右键Copy Renference获取)
包含扫描(只扫描谁):<context:include-filter type="annotation" expression="org-springframework.stereotype.controller"/>
(写于<context:component-scan base-package="com.atguigu.spring" use-default-filters="false"></context:component-scan>中)
(use-default-filters="false”,所设置的包下所有的类都不需要扫描,默认true)
注:通过注解加扫描配置的bean的id,默认值为类的小驼峰,如果要设置自定义id,形式为@注解("自定义id")
@Autowired:实现自动装配功能的注解
@Autowired注解标识的位置:
①标识在成员变量上,此时不需要设置成员变量的set方法
②标识在set方法上
③标识在为当前成员赋值的有参构造上
@Autowired原理:
默认通过byType的方式,在IOC容器中通过类型匹配某个bean为属性赋值
若有多个类型匹配的bean,自动转为byName方式实现自动装配效果
若byType与byName的方式都无法实现自动装配,抛异常NoUniqueBeanDefinitionException
此刻可在要赋值的属性上添加一个注解@Qualifier通过该注解的value属性值指定某个bean的id,将这个bean为属性赋值
网友评论