一.自动装配
自动装配:是使用spring满足bean依赖的一种方法
spring会站在应用上下文中为某个bean寻找其依赖的bean
spring中bean有三种装配机制分别是:
1.在xml中显式配置
2.在java中显式配置
3.隐式的bean发现机制和自动装配
自动装配的方式
1.autowire -byname(按名称自动装配)
<bean id="people" class="com.zh.pojo.People" autowire="byName">
2.auto-bytpe(按类型自动装配)
<bean id="people" class="com.zh.pojo.People" autowire="bype">
使用注解:
##注解支持约束
<context:annotation-config/>
<!--扫描包下所有组件-->
<context:component-scan base-package="com.zh"/>
##注解说明
自动装配:
-@Autowired:通过类型,名字
如果Autowored不能唯一自动装配属性,则需要通过@Qualifier(value="");
-@Nullable:字段标记了这个注解,说明这个字段可以为空
-@Resource:自动装配通过名字,类型
-compoent:组件,放在类上,说明这个类被spring管理了,就是bean
compoent衍生注解,在web开发中,会按照MVC三层架构分层:
-dao 【@Repository】
-service 【@Service】
-controller 【@Controller】
注:这是个注解的功能都是一样的,都代表将某个类注册在Spring中,装配Bean
作用域:
-@Scope("singleton")//prototype
小结:
xml与注解:
xml更加万能,适用于任何场合,维护更加方便
注解 不是自己的类使用不了,维护相对复杂
xml与注解最佳实践:
xml用来管理bean
注解只负责完成属性的注入
在使用过程中,只需要注意一个问题:必须让注解生效,就需要开启注解的支持
@Autowired与@Resourse的区别:
都是用来自动自动装配的,都可以放在属性字段上
@Autowired默认通过bytype方式实现,然后byname,而且必须要有这个对象
@Resourse通过默认byname的方式实现,如果找不到名字,则通过bytype实现,如果两个都找不到,则报错
执行顺序不同:@Autowired默认通过bytype的方式实现。
@Resource默认通过byname的方式实现
Bean的作用域:
单例模式:(Spring默认机制)一个bean表示一个对象
<bean id="user" class="com.zh.pojo.User" p:age="18" p:name="zh" scope="singleton"/>
原型模式:每次从容器中get的时候,都会产生一个新对象
<bean id="user2" class="com.zh.pojo.User" c:age="19" c:name="zfl" scope="prototype"/>
其余的request,session,application这些只能在web开发中使用