一、Spring基本使用
程序员文章站
2022-06-08 09:07:59
...
1.IOC
- 什么是IOC?
控制反转:将对象的创建权反转给(交给)Spring
- 为什么使用IOC?
业务和实现类过于紧密,业务变更时要修改源码
- 创建
UserDao接口和UserDaoMysqlImpl 实现类
public interface UserDao {
}
public class UserDaoMysqlImpl implements UserDao{
}
- 传统开发模式:
实现类UserDaoMysqlImpl和接口UserDao 紧密耦合,不利于复杂业务
UserDao user = new UserDaoMysqlImpl();
- IOC模式
- 首先创建配置文件
applicationContext.xml
(src/目录下)
<?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
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userDao" class="com.itlike.demo1.UserDaoMysqlImpl" >
</bean>
</beans>
- 在
UserTest
类里创建测试方法Junit4 test
@Test
public void test(){
//1.加载配置文件
ApplicationContext applicationContext=
new ClassPathXmlApplicationContext("applicationContext.xml");
//2.根据id获取对象
UserDao userDao = (UserDao) applicationContext.getBean("userDao");
}
- 这样就使用IOC的方式创建了
UserDao
的对象,当需求变更时(需要改变实现类)
只需要改动xml
文件里的class
属性即可。
2.依赖注入-DI
- 修改类
- 给
UserDaoMysqlImpl
添加属性值name
和setter
方法
public class UserDaoMysqlImpl implements UserDao{
public String name;
public void setName(String name){
this.name=name;
}
}
- DI注入
(给属性赋值)
-
前提必须有IOC的环境
,即使用IOC创建了对象! -
实现类当中的属性要提供setter方法
(如上) 在配置文件当中配置依赖注入(配置bean和property标签)
- 传统方式
(也是给属性赋值)
UserDao userDao = new UserDaoMysqlImpl();
userDao.name="lk"; //有的使用setName方法,但是同一个道理
- DI注入
- 配置文件修改
<bean id="userDao" class="com.itlike.demo1.UserDaoOraclelImpl" >
<!--要提供set方法才能注入成功-->
<property name="name" value="lk"/>
</bean>
- 测试类
//1.加载配置文件
ApplicationContext applicationContext=
new ClassPathXmlApplicationContext("applicationContext.xml");
//2.根据id获取对象
UserDao userDao = (UserDao) applicationContext.getBean("userDao");
System.out.println(userDao.name); //lk (String类型)
3.Bean相关配置
- 名称与标识
- id:
使用了约束中的唯一约束。里面不能出现特殊字符的
- name:
没有使用约束中的唯一约束。里面可以出现特殊字符。
- 设置对象的生命周期方法
- 初始化:
init-method
Bean被初始化的时候执行的方法
- 销毁:
destroy-method
Bean被销毁的时候执行的方法(Bean是单例创建,工厂关闭)
<bean id="userDao" class="com.itlike.demo1.UserDaoOraclelImpl" init-method="init" destroy-method="destroy">
- Bean的作用范围的配置
- 单例模式
默认
<bean id="userDao" class="com.itlike.demo1.UserDaoOraclelImpl" scope="singleton">
- 多例模式
<bean id="userDao" class="com.itlike.demo1.UserDaoOraclelImpl" scope="prototype">
- 工厂实例化的方式
无参构造-默认
静态工厂实例化(少用)
<bean id="userDao" class="com.itlike.demo1.UserDaoOraclelImpl" factory-method="Xxx(方法名)">
实例工厂实例化(极少用)
4.分模块配置
- 顾名思义,即使用多个的
applicationContext.xml
,互相引入
applicationContext1.xml
<?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
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--分模块配置,导入模块配置2-->
<import resource="applicationContext2.xml"/>
</beans>
applicationContext2.xml
<?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
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="user" class="com.itlike.demo3.User" factory-method="createUser">
<property name="" value=""/>
</bean>
</beans>
上一篇: PHP ReflectionClass
下一篇: elementui分页
推荐阅读