依赖注入
DI,Dependency injection
依赖: 指bean对象的创建依赖于Spring容器
注入: 指Bean对象所依赖的资源,由容器来设置和装配
在beans.xml中配置
1、常量注入
<!--普通字段-->
<bean id="user1" class="com.anye.pojo.User">
<property name="name" value="anye"/>
</bean>
2、Bean注入
<!--引用其他bean使用ref-->
<property name="address" ref="addr"/>
3、数组注入
<property name="books">
<array>
<value>《三体》</value>
<value>《超新星纪元》</value>
<value>《球状闪电》</value>
<value>《流浪地球》</value>
</array>
</property>
4、List注入
<property name="hobbies">
<list>
<value>说唱</value>
<value>电影</value>
<value>游戏</value>
<value>科幻</value>
</list>
</property>
5、Map注入
<property name="card">
<map>
<entry key="IdCard" value="6666666888888884444"/>
<entry key="StudyId" value="03163000"/>
</map>
</property>
6、set注入
<property name="games">
<set>
<value>GTA5</value>
<value>PUBG</value>
<value>DOTA2</value>
<value>deadcoming</value>
</set>
</property>
7、空值注入
</property>
<property name="worried">
<null/>
</property>
8、Properties注入
<property name="card">
<props>
<prop key="StudentCard">03162000</prop>
<prop key="IdCard">123456789012345678</prop>
</props>
</property>
拓展:
1、p命名空间注入
注意:需要导入对应的约束文件
<!--p:property属性,命名空间注入-->
<bean id="user5" class="com.anye.pojo.User" p:name="安月" p:age="18" p:sex="女"/>
2、c命名空间注入
<!--c:constructor构造器:命名空间注入-->
<bean id="user6" class="com.anye.pojo.User" c:name="安夜" c:age="20" c:sex="男"/>
Bean作用域及自动装配
在Spring中,那些组成应用程序的主体及由SpringIOC容器所管理的对象,被称之为bean。简单地讲,bean就是由IOC容器初始化、装配及管理的对象。
配置文件中定义bean时,我们不仅可以配置Bean属性值及相互之间的依赖关系,还可以定义Bean的作用域。作用域会对Bean的生命周期和创建方式产生影响。
Bean的作用域类型:
类型 | 说明 |
---|---|
singleton | 在 Spring 容器中仅存在一个 Bean 实例, Bean 以单例的形式存在,默认值。 |
prototype | 每次从容器中调用 Bean 时,都会返回一个新的实例,即相当于执行 new XxxBean() 的实例化操作。 |
request | 每次 http 请求都会创建一个新的 Bean , 仅用于 WebApplicationContext 环境。request.setAttribute("","") |
session | 同一个 http Session 共享一个 Bean ,不同的 http Session 使用不同的 Bean,仅用于 WebApplicationContext 环境。session.setAttribute("","") |
globalSession | 同一个全局 Session 共享一个 bean, 用于 Porlet, 仅用于 WebApplication 环境。application.setAttribute("","") |
Spring以容器的方式,使得我们仅需配置,即可的到天然的单例模式
在五种作用域中,request、session和globalSession三种作用域仅在web的应用中使用。
自动装配(了解)
自动装配的属性和引用的名称一样,可以使用自动装配
<!--自动装配,不建议使用,建议使用注解-->
<bean id="user" class="com.anye.dao.User" autowire="byName"/>