1.bean注入
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="address" class="com.gykj.pojo.Address">
<property name="address" value="铜冶"/>
</bean>
<!-- id bean唯一标识符
class:全限定名-->
<bean id="student" class="com.gykj.pojo.Student">
<property name="name" value="linyajing"/>
<!-- 对象注入-->
<property name="address" ref="address"/>
<!-- 数组-->
<property name="books">
<array>
<value>java编程思想</value>
<value>追风筝的人</value>
</array>
</property>
<!-- list-->
<property name="hobbys">
<list>
<value>唱歌</value>
<value>跑步</value>
</list>
</property>
<!-- map-->
<property name="card">
<map>
<entry key="身份证" value="1234456"/>
<entry key="学号" value="17021211"/>
</map>
</property>
<!-- set-->
<property name="games">
<set>
<value>王者</value>
<value>消消乐</value>
</set>
</property>
<!-- 空值-->
<property name="wife">
<null/>
</property>
<!-- 配置属性-->
<property name="info">
<props>
<prop key="url">localhost3306</prop>
<prop key="username">root</prop>
</props>
</property>
</bean>
</beans>
2.bean作用域
1、单例模式(默认)
2、原型模式(每次从容器中get的时候,都会创建新对象)
其余request、application、session都只能在web中使用
3.bean自动装配
bean自动装配是spring满足bean依赖的一种方式
spring会在上下文中自动寻找,并自动给bean装配属性
在spring中有三种装配的方式
在xml中显示的配置
在java中显示配置
隐式的自动装配bean
ByType自动装配
<bean id="cat" class="com.gykj.pojo.Cat"></bean>
<bean id="dog" class="com.gykj.pojo.Dog"></bean>
<bean id="people" class="com.gykj.pojo.People" autowire="byName">
<property name="name" value="wode"></property>
</bean>
byName时,需要保证所有的bean的id唯一,并且这个bean需要和自动注入的属性的set方法的值一致
byType时,需要保证所有的bean的class唯一,并且这个bean需要和自动注入的属性一致
4.@Autowired
直接在属性上使用即可,也可以在set方法上使用
使用Autowired我们就可以不用写set方法了,前提是你这个自动装配的属性在IOC容器只能够存在,且符合名字byName
@Nullable 字段标记了这个注解,可以为空
如果@Autowired自动装配的环境比较复杂,自动装配无法通过一个注解完成的时候,我们可以使用@qualifier(value="**")去配置@Autowired的使用,指定一个唯一的bean对象注入
@Autowired
@Qualifier(value = "cat22")
private Cat cat;
@Resource(name = "dog")
private Dog dog;
resource和Autowired区别:
都是用来自动装配的,都可以放在属性字段上
@Autowired通过byType的方式实现,而且必须要求这个对象存在
@Resource默认通过Byname方式实现,如果找不到名字,则通过byType实现,如果两个方式都找不到,就报错
5.@Component
//相当于<bean id = "user" class="com.gykj.pojo.User/>
@Component
public class User {
// 相当于在bean中的属性<property id = "name" value="name"/>
@Value("linyajing11")
public String name ;
}
衍生的注解:
@Component有几个衍生注解,我们在web开发中,会按照mvc三层架构分层
@dao 【@Repository】
@service 【@Service】
@controller 【@Controller】
这四个注解功能都是一样的,都是代表将某个类注册到spring中,装配bean
xml与注解:
xml更加万能,适用于任何场合,维护简单方便
注解不是自己类使用不了,维护相对复杂
xml与注解最佳时间:
xml用来管理bean
注解只负责完成属性的注入
我们在使用的过程中,只需要注意一个问题,必须让注解生效,就需要开启注解的支持
<context:component-scan base-package = "com.gykj"/>
<comtext:annotation-config/>