您现在的位置是:首页 >技术杂谈 >spring网站首页技术杂谈

spring

RUNEUN 2024-09-12 00:01:02
简介spring

1、IOC容器(spring提供)

控制反转(对象创建权的转换)

由主动new产生对象,转换为由外部提供对象(被创建或管理的对象统称为Bean

        导入spring坐标

<dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-context</artifactId>
     <version>5.3.23</version>
</dependency>

        定义spring管理的类(接口)

        spring配置文件,applicationContext.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">

    <!--1、导入spring坐标spring-context,对应版本5.3.23-->

    <!--2、配置bean-->
    <!--id表示给bean起名字  class表示给bean定义类型      -->
    <bean id="bookDao" class="com.wrx.dao.impl.BookDaoImpl"/>
    <bean id="bookService" class="com.wrx.service.impl.BookServiceImpl"/>
</beans>

2、DI依赖注入

建立Bean和Bean之间的依赖关系

java-app

        //3、获取IOc容器
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        //4、获取bean
        BookDao bookDao = (BookDao) ctx.getBean("bookDao");
public class BookServiceImpl implements BookService {
    //5、删除业务层中使用new的方式创建的dao对象
    private BookDao bookDao;

    public void save(){
        System.out.println("book service save...");
        bookDao.save();
    }
    //6、提供对应的set方法
    public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }
}

applicationContext.xml 

<bean id="bookService" class="com.wrx.service.impl.BookServiceImpl">
      <!--7、配置server与dao的关系-->
      <!--property标签表示配置与当前bean的属性,name属性表示配置哪一个具体的属性,ref属性表示参照哪一个bean-->
      <property name="bookDao" ref="bookDao"/>
</bean>

##IoC管理service和Dao,通过配置将被管理的对象——>ioc

##通过接口获取ioc容器,接口方法获取Bean

##通过pom文件导入坐标

3、bean

name控制一个bean有多个名称

spring默认bean单例(创建的对象反复使用)(使用无参构造器)

(封装实体的域对象、不适合交给容器管理)

作用范围:一个bean的创建是否是单例

实例化:

    <!--方法1:构造方法实例化bean-->
    <bean id="bookDao" class="com.wrx.dao.impl.BookDaoImpl"/>
    <!--方法2:静态工厂实例化bean-->
    <bean id="orderDao" class="com.wrx.factory.OrderDaoFactory" factory-method="getOrderDao"/>
    <!--方法3:使用实例工厂实例化bean-->
    <bean id="userFactory" class="com.wrx.factory.UserDaoFactory"/>
    <bean id="userDao" factory-method="getUserDao" factory-bean="userFactory"/>
    <!--方法4:使用FactoryBean实例化bean-->
    <bean id="userDao" class="com.wrx.factory.UserDaoFactoryBean"/>

        静态工厂

public class OrderDaoFactory {
    public static OrderDao getOrderDao(){
        return new OrderDaoImpl();
    }
}

        方法四: 

public class UserDaoFactoryBean implements FactoryBean<UserDao> {
    //代替原始实例化工厂中创建对象的方法
    @Override
    public UserDao getObject() throws Exception {
        return new UserDaoImpl();
    }

    @Override
    public Class<?> getObjectType() {
        return UserDao.class;
    }
}

bean生命周期

    <!--方法1:配置 -->
    <bean id="bookDao" class="com.wrx.dao.impl.BookDaoImpl" init-method="init" destroy-method="destory"/>
    <!--方法2:接口-->
    InitializingBean
    DisposableBean

关闭容器

ConfigurableApplicationContext

        close()

        registerShutdownHook()

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。