写在前面
Spring-context
- spring容器
- 通过配置
pom文件的方式简化代码开发
- 命名空间,简化配置,可以用命名空间的上下文作为标签属性;
p空间对象依赖注入;context空间引用Spring模块功能
基本开发步骤
web框架的maven导入spring
- 创建spring版本的applicationContex.xml
<bean id="userDao" class="com.test.impl.UserDaoImpl"></bean>
ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml")
UserDao userDao = (UserDao) app.getBean("userDao")
userDao.save()
Bean
<bean id="userDao" class="con.java.impl.UserDaoImpl" scope="singleton" init-method="init" destroy-method="dealloc" ></bean>
- id,Bean实例在Spring容器中的唯一标识
- class,类的全限定名称
- scope,对象的作用范围;
singleton创建一个,加载配置文件的时候对象就被创建,当应用卸载,销毁容器时,对象被销毁;prototype创建多个,每次getBean时创建,长时间不用时被垃圾回收,同正常的对象使用

- init-method 初始化方法名称
- destroy-method 指定销毁方法名称
- 手动关闭容器
(ClassPathXmlApplicationContext)app.close();
实例化对象
<bean id="userDao" class="com.java.demo.factory.StaticFactory" factory-method="getUserDao"></bean>
<bean id="factory" class="com.java.demo.factory.DynamicFactory"></bean>
<bean id="userDao" factory-bean="factory" factory-method="getUserDao"></bean>
依赖注入
- 对象调用,可以注入普通数据、引用数据、集合数据
- 通过框架将持久层对象传入业务层
- set方法注入
<bean id="userDao" class="con.java.impl.UserDaoImpl"></bean>
<bean id="userService" class="com.java.demo.service.impl.UserServiceImpl">
<property name="userDao" ref="userDao"></property>
</bean>
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
xmlns:p="http://www.springframework.org/schema/p"
<bean id="userService" class="com.java.demo.service.impl.UserServiceImpl" p:userDao-ref="userDao"/>
<bean id="userDao" class="con.java.impl.UserDaoImpl"></bean>
<bean id="userService" class="com.java.demo.service.impl.UserServiceImpl">
<constructor-arg name="userDao" ref="userDao"></constructor-arg>
</bean>
private UserDao userDao;
public UserServiceImpl(UserDao userDao) {
this.userDao = userDao;
}
<property name="username" value="zhangsan"></property>
<property name="age" value="18"></property>
<property name="stringList">
<list>
<value>zhangsan</value>
<value>lisi</value>
<value>wangwu</value>
</list>
</property>
<property name="userMap">
<map>
<entry key="u1" value-ref="user1"></entry>
<entry key="u2" value-ref="user2"></entry>
</map>
</property>
<property name="properties">
<props>
<prop key="p1">ooo1</prop>
<prop key="p2">pppp3</prop>
</props>
</property>
<bean id="user1" class="con.mzx.impl.User">
<property name="name" value="zhaoliu"></property>
<property name="age" value="20"></property>
</bean>
<bean id="user2" class="con.mzx.impl.User">
<property name="name" value="zhiadaw"></property>
<property name="age" value="17"></property>
</bean>
配置拆解
<import resource="applicationContext-user.xml"/>
相关API
ApplicationContext
- ClassPathXmlApplicationContext,从类的跟路径加载配置文件
ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("applicationContext.xml")
- FileSystemXmlApplicationContext,磁盘地址
- AnnotationConfigApplicationContext,使用注解配置容器对象时,通过此类
getBean
- 通过字符串获取,通过唯一的id获取
- 通过字节码获取,如果只有一个类,可以使用,不用通过强转
classPathXmlApplicationContext.getBean(UserService.class);