spring

spring开发步骤

  • 导入spring开发基本包坐标
  • 编写Dao接口实现类 Bean
  • 创建Spring核心配置文件 applicationContext.xml
  • 在Spring配置文件中配置UserDaoImpl
  • 使用Spring的API获得Bean实例

Bean标签基本配置

基本属性
  • **id:**Bean实例在Spring容器中的唯一标识
  • **class:**Bean的全限定名称 (全限定名=包名+类型)
Bean的标签范围配置

image-20220715151733972

  • singleton

    • 实例化1个
    • 在Spring核心文件被加载时,实例化配置的Bean实例
    • 对象创建在应用加载创建容器时,对象就被创建,只要容器在,对象就一直在,当应用卸载销毁容器时,对象被销毁
  • protorype

    • 实例化多个
    • 当调用getBean()方法实例化Bean时
    • 使用对象时,创建新的对象实例,只要对象在使用时,就一直在,当对象长时间不用时,被Java的垃圾回收器回收了
Bean生命周期配置
  • **init-method:**指定类中的初始化方法名称
  • **destroy-method:**指定类中销毁方法名称
1
init-method="init" destroy-method="destory"

通过close来关闭

1
2
3
4
5
6
public void test1(){
AbstractApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao1 = (UserDao) app.getBean("userDao");
System.out.println(userDao1);
app.close();
}
Bean实例化三种方式
  • 无参构造方法实例化:

  • 工厂静态方法实例化:通过工厂

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    package com.yuuu.factory;

    import com.yuuu.dao.UserDao;
    import com.yuuu.dao.impl.UserDaoImpl;

    /**
    * @author Yuuu
    */
    public class StaticFactory {
    public static UserDao getUserDao(){
    return new UserDaoImpl();
    }
    }
    1
    <bean id="userDao" class="com.yuuu.factory.StaticFactory" factory-method="getUserDao"></bean>
  • 工厂实例方法实例化:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    package com.yuuu.factory;

    import com.yuuu.dao.UserDao;
    import com.yuuu.dao.impl.UserDaoImpl;

    public class DynamicFactory {
    public UserDao getUserDao(){
    return new UserDaoImpl();
    }
    }
1
2
<!--工厂实例方法实例化    <bean id="factory" class="com.yuuu.factory.DynamicFactory" ></bean>-->
<!-- <bean id="userDao" factory-bean="factory" factory-method="getUserDao"></bean>-->
Bean依赖注入
  • 将UserDao注入UserService内部

    • 构造方法

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      import com.yuuu.dao.UserDao;
      import com.yuuu.service.UserService;

      public class UserServiceImpl implements UserService {

      private UserDao userDao;

      public void setUserDao(UserDao userDao) {
      this.userDao = userDao;
      }

      @Override
      public void save() {
      userDao.save();
      }
      }
    • set方法

​ xml文件中

1
2
3
xmlns:p="http://ww.springframework.org/schema/p"

<bean id="userService" class="com.yuuu...UserServiceImpl" p:userDao-ref="userDao"/>

Spring相关API

ClassPathXmlApplicationContext
  • 从类的根路径下加载配置文件推荐使用此
FileSystemXmlAppliactionContext
  • 从磁盘路径上加载配置文件,配置文件可以在磁盘的任意位置

  • XML所在的绝对路径

    1
    //        ApplicationContext app = new FileSystemXmlApplicationContext("D:\\Workspace\\JAVA\\Spring\\src\\main\\resources\\applicationContext.xml");
AnnotationConfigApplicationContext
  • 使用注解的
getBean()的使用
  • 某一个类型的Bean只存在一个使用此方法,否则使用id的方式

    1
    UserService userService = app.getBean("userservice.class");
数据源
  • 数据源是为了提高程序性能出现的
  • 先实例化对象,初始化部分连接资源
  • 归还资源