欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

一、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模式
  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>