Spring入门的实现步骤:
- 导入坐标
- 创建Bean
- 创建applicationContext.xml
- 在配置文件中进行配置
- 创建ApplicationContext对象getBean
Bean标签基本配置
-
id:Bean实例在Spring容器中的唯一标识
-
class:Bean的全限定名称
-
scope:指对象的作用范围,取值如下:
singleton:默认值,单例的
prototype:多例的
request: WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 request 域中
session:WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 session 域中
global session: WEB 项目中,应用在 Portlet 环境,如果没有 Portlet 环境那globalSession相当于 session1)当scope的取值为singleton时
Bean的实例化个数:1个
Bean的实例化时机:当Spring核心文件被加载时,实例化配置的Bean实例
Bean的生命周期:
对象创建:当应用加载,创建容器时,对象就被创建了
对象运行:只要容器在,对象一直活着
对象销毁:当应用卸载,销毁容器时,对象就被销毁了
2)当scope的取值为prototype时
Bean的实例化个数:多个
Bean的实例化时机:当调用getBean()方法时实例化Bean
对象创建:当使用对象时,创建新的对象实例
对象运行:只要对象在使用中,就一直活着
对象销毁:当对象长时间不用时,被 Java 的垃圾回收器回收了
Bean实例化三种方式
- 无参构造方法实例化(重点掌握)
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
- 工厂静态方法实例化(理解)
public class StaticFactoryBean { public static UserDao createUserDao(){ return new UserDaoImpl(); } }
<bean id="userDao" class="com.itlyt.factory.StaticFactory" factory-method="getUserDao"></bean>
- 工厂实例方法实例化(理解)
public class DynamicFactoryBean {public UserDao createUserDao(){ return new UserDaoImpl() }}
<bean id="factory" class="com.itlyt.factory.DynamicFactory" ></bean>
<bean id="userDao" factory-bean="factory" factory-method="getUserDao" ></bean>
Bean的依赖注入方式
1)set方法
在UserServiceImpl中添加setUserDao方法
public class UserServiceImpl implements UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void save() {
userDao.save();
}
}
配置Spring容器调用set方法进行注入
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
<bean id="userService" class="com.itheima.service.impl.UserServiceImpl">
<property name="userDao" ref="userDao"/>
<!-- name的含义是set方法后面的名字(首小写)ref是引用容器对象bean的id-->
</bean>
2)构造方法注入
public class UserServiceImpl implements UserService {
private UserDao userDao;
public UserServiceImpl() {
}
public UserServiceImpl(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void save() {
userDao.save();
}
}
配置Spring容器调用set方法进行注入
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
<bean id="userService" class="com.itheima.service.impl.UserServiceImpl">
<constructor-arg name="userDao" ref="userDao"></constructor-arg>
<!-- name的含义是构造参数的参数名 ref是引用容器对象bean的id-->
</bean>
Bean的依赖注入的数据类型
1) 普通数据类型的注入
public class UserDaoImpl implements UserDao {
private String company;
private int age;
public void setCompany(String company) { this.company = company; }
public void setAge(int age) { this.age = age; }
public void save() {
System.out.println(company+"==="+age);
System.out.println("UserDao save method running....");
}
}
配置Spring容器调用set方法进行注入
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
<property name="company" value="传智播客"></property>
<property name="age" value="15"></property>
</bean>
2) 集合数据类型(List <String >,Properties)的注入
public class UserDaoImpl implements UserDao {
private List<String> strList;
private Properties properties;
public void setStrList(List<String> strList) { this.strList = strList; }
public void setProperties(Properties properties) { this.properties = properties;}
public void save() {
System.out.println(strList);
System.out.println(properties);
System.out.println("UserDao save method running....");
}
}
配置Spring容器调用set方法进行注入
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
<property name="strList" >
<list>
<value>AAA</value>
<value>bbb</value>
<value>ccc</value>
</list>
</property>
<property name="properties">
<props>
<prop key="p1" >ppppppp1</prop>
<prop key="p2" >ppppppp2</prop>
<prop key="p3" >ppppppp3</prop>
</props>
</property>
</bean>
Spring的重点配置
<bean>标签
id属性:在容器中Bean实例的唯一标识,不允许重复
class属性:要实例化的Bean的全限定名
scope属性:Bean的作用范围,常用是Singleton(默认)和prototype
<property>标签:属性注入
name属性:属性名称
value属性:注入的普通属性值
ref属性:注入的对象引用值
<list>标签
<map>标签
<properties>标签
<constructor-arg>标签
<import>标签:导入其他的Spring的分文件