maven使用Spring核心包的坐标
<!-- Spring核心jar包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.5.RELEASE</version>
<scope>provided</scope>
</dependency>
Bean标签:
用于配置对象交由Spring来创建
默认情况下创建对象是使用无参构造,如果没有无参构造函数就是无法创建
基本属性:
id:唯一标识
class:Bean的全限定名(类的全类名)
其他属性
scope:指对象的作用范围:
属性值 | 作用范围 |
---|---|
singleton | 默认值,单例的;对象只有一个 |
prototype | 多例的;每一个使用多会创建一个新的对象 |
request | web项目中,Spring创建一个Bean对象,并将对象存入到request域中 |
session | web项目中,Spring创建一个Bean对象,并将对象存入session域中 |
global session | web项目中,应用在Portlet环境中,如果没有Protlet环境那么globalSession相当于session |
Bean配置对象创建时机
Bean标签配置对应的初始化方法和销毁方法
init-method:指定类中的初始化方法名称
destroy-method:指定类中销毁的方法名称
依赖注入
依赖注入它是Spring框架核心IOC的具体实现;可以理解为将持久层传递给业务层,但是这个过程是交由Spring来完成的
有两大注入范式:
1、通过属性的set方法进行注入
2、通过类的构造方法进行注入
set方式进行对象的注入
<!-- Spring的核心配置文件 -->
<bean id="userDao" class="com.lenjing.dao.impl.UserDaoImpl"></bean>
<bean id="serverUser" class="com.lenjing.server.ServerUserImpl">
<property name="userDao" ref="userDao"></property>
</bean>
实现原理:通过反射,进行字符串拼接找到对应的方法进行调用完成注入
解析:
property标签中属性name不是要注入类的bean标签的id,是要注入类的set方法的后部分开头小写;如这里:在ServiceUserImpl中UserDao类的注入set方法是setUser,那么在标签中name属性就应该是user
ref属性就是要注入对象的Bean标签中的id值
注:单例模式或多例并不会影响到注入
set方式进行普通属性的注入
<!-- Spring的核心配置文件 -->
<bean id="userDao" class="com.lenjing.dao.impl.UserDaoImpl"></bean>
<bean id="serviceUser" class="com.lenjing.service.ServiceUserImpl">
<property name="userDao" ref="userDao"></property>
<property name="name" value="zhangshan"></property>
<property name="age" value="18">
</bean>
解析:
name属性表示类中set方法后的字段,value则是要进想注入的值
set方式集合的注入
<!-- properties类型: -->
<property name="properties">
<props>
<prop key="k1">1</prop>
<prop key="k2">2</prop>
<prop key="k3">3</prop>
</props>
</property>
<!-- map类型: -->
<property name="map">
<map>
<entry key="n1" value="1111"></entry>
<entry key="n2" value="2222"></entry>
</map>
</property>
<!-- list类型: -->
<property name="list">
<list>
<value>123</value>
</list>
</property>
通过构造方法进行注入
<bean id="serverUserDao "class="com.lenjing.ServerUserDao">
<constructor-arg name="userDao" ref="userDao"></constructor-arg>
<constructor-arg name="name" value="zhangshan"></constructor-arg>
<constructor-arg name="age" value="18"></constructor-arg>
</bean>
解析:这里的name代表构造方法的形参名,ref代表bean标签id进行引用注入,value是普通属性注入