一、Spring基本使用

1.IOC

  • 什么是IOC?

控制反转:将对象的创建权反转给(交给)Spring

  • 为什么使用IOC?

业务和实现类过于紧密,业务变更时要修改源码

  • 创建UserDao接口和UserDaoMysqlImpl 实现类
public interface UserDao {    
}

public class UserDaoMysqlImpl implements UserDao{    
}
  • 传统开发模式:实现类UserDaoMysqlImpl和接口UserDao 紧密耦合,不利于复杂业务
UserDao user = new UserDaoMysqlImpl();
  • IOC模式
  1. 首先创建配置文件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>	
  1. UserTest类里创建测试方法Junit4 test
@Test
public void test(){   
    //1.加载配置文件
    ApplicationContext applicationContext=
    new ClassPathXmlApplicationContext("applicationContext.xml");
    //2.根据id获取对象
    UserDao userDao = (UserDao) applicationContext.getBean("userDao");  
}
  1. 这样就使用IOC的方式创建了UserDao的对象,当需求变更时(需要改变实现类)只需要改动xml文件里的class属性即可。

2.依赖注入-DI

  • 修改类
  1. UserDaoMysqlImpl添加属性值namesetter方法
public class UserDaoMysqlImpl implements UserDao{
    public String name;
    public void setName(String name){
    	this.name=name;
    }
}
  • DI注入(给属性赋值)
  1. 前提必须有IOC的环境,即使用IOC创建了对象!
  2. 实现类当中的属性要提供setter方法(如上)
  3. 在配置文件当中配置依赖注入(配置bean和property标签)
  • 传统方式(也是给属性赋值)
UserDao userDao = new UserDaoMysqlImpl();
userDao.name="lk"; //有的使用setName方法,但是同一个道理
  • DI注入
  1. 配置文件修改
<bean id="userDao" class="com.itlike.demo1.UserDaoOraclelImpl" >
        <!--要提供set方法才能注入成功-->
        <property name="name" value="lk"/>
</bean>
  1. 测试类
//1.加载配置文件
ApplicationContext applicationContext=
new ClassPathXmlApplicationContext("applicationContext.xml");
//2.根据id获取对象
UserDao userDao = (UserDao) applicationContext.getBean("userDao");
System.out.println(userDao.name); //lk  (String类型)

3.Bean相关配置

  • 名称与标识
  1. id:

使用了约束中的唯一约束。里面不能出现特殊字符的

  1. name:

没有使用约束中的唯一约束。里面可以出现特殊字符。

  • 设置对象的生命周期方法
  1. 初始化:init-method

Bean被初始化的时候执行的方法

  1. 销毁:destroy-method

Bean被销毁的时候执行的方法(Bean是单例创建,工厂关闭)

<bean id="userDao" class="com.itlike.demo1.UserDaoOraclelImpl"  init-method="init"  destroy-method="destroy">
  • Bean的作用范围的配置
  1. 单例模式默认
<bean id="userDao" class="com.itlike.demo1.UserDaoOraclelImpl"  scope="singleton">
  1. 多例模式
<bean id="userDao" class="com.itlike.demo1.UserDaoOraclelImpl"  scope="prototype">
  • 工厂实例化的方式
  1. 无参构造-默认
  2. 静态工厂实例化(少用)
<bean id="userDao" class="com.itlike.demo1.UserDaoOraclelImpl"  factory-method="Xxx(方法名)">
  1. 实例工厂实例化(极少用)

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>

猜你喜欢

转载自blog.csdn.net/A15815635741/article/details/84196654