Spring01

    技术2022-07-14  70

    1 首先,新建一个maven项目, 在pom.xml中导入spring相关

    <packaging>jar</packaging> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.7.RELEASE</version> </dependency> </dependencies>

    2 在resources下面新建bean.xml文件, 配置spring的bean容器. resources即为项目类的根路径

    <?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"> <!--第一种方法: 使用默认的构造函数. 在spring的配置文件中使用bean标签,配以id和class属性之后,且没有其他标签时,使用默认的构造函数创建 (重写有参构造方法之后,一定要重写无参构造) <bean id="accountService" class="com.hr.service.impl.AccountServiceImpl"/> --> <!--第二种方法(在jar包中的类的某个方法): 使用普通工厂中的方法创建对象(使用某个类中的方法创建对象,并存入容器中)--> <!--<bean id="instanceFactory" class="com.hr.factory.InstanceFactory"/> <bean id="accountService" factory-bean="instanceFactory" factory-method="getAccountService"/>--> <!--第三种方法(在jar包中的类的某个方法): 使用工厂中的静态方法创建对象(使用某个类中的静态方法创建对象,并存入容器中)--> <!--<bean id="accountService" class="com.hr.factory.StaticFactory" factory-method="getAccountService"/>--> <!-- bean对象的生命周期: 单例对象: 出生: 当容器创建时对象出生 活着: 只要容器还在,对象一直活着 死亡: 容器销毁,对象消亡 死亡: 单例对象的生命周期和容器相同 多例对象: 出生: 当我们get对象的时候(使用对象)时spring框架为我们创建 活着: 对象只要是在使用过程中就一直活着 死亡: 当对象长时间不用,且没有别的对象引用时候,由Java的垃圾回收器回收 --> <bean id="accountService" class="com.hr.service.impl.AccountServiceImpl" scope="prototype" init-method="init" destroy-method="destory" /> </beans>

    AccountServiceImpl实体类: 

    public class AccountServiceImpl implements IAccountService { public AccountServiceImpl() { System.out.println("AccountServiceImpl创建了"); } public void saveAccount() { System.out.println("service中的saveAccount执行了 "); } private void init() { System.out.println("对象初始化了"); } private void destory() { System.out.println("对象销毁了"); } }

    测试类: 

    package com.hr; import com.hr.dao.impl.AccountDaoImpl; import com.hr.service.IAccountService; import com.hr.service.impl.AccountServiceImpl; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; public class Client { public static void main(String[] args) { // testIoc01(); ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean.xml"); IAccountService as = (IAccountService) applicationContext.getBean("accountService"); //手动关闭容器 applicationContext.close(); } private static void testIoc01() { // /*-------------ApplicationContext-------------*/ // ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml"); // AccountServiceImpl accountService = (AccountServiceImpl) ac.getBean("accountService"); // AccountDaoImpl accountDao = (AccountDaoImpl) ac.getBean("accountDao"); // System.out.println(accountService); // System.out.println(accountDao); // /*-------------BeanFactory-------------*/ Resource resource = new ClassPathResource("bean.xml"); BeanFactory factory = new XmlBeanFactory(resource); AccountServiceImpl accountService = (AccountServiceImpl) factory.getBean("accountService"); System.out.println(accountService); } }

    笔记: 

    两个容器: ApplicationContext: 顶级父类是BeanFactory, 但是创建对象的策略是立即加载的方式,只要一读完配置文件就马上创建配置文件中 的对象 (单例对象适用: Servlet, Service等) BeanFactory: :延迟加载, 什么时候根据id获取对象了, 什么时候才真正的创建对象 (多例对象适用) Spring对bean的管理细节: 1 创建bean的三种方式 第一种方法: 使用默认构造函数创建 第二种方法: 使用普通工厂中的方法创建对象(使用某个类中的方法创建对象,并存入容器中) 第二种方法: 使用工厂中的静态方法创建对象(使用某个类中的静态方法创建对象,并存入容器中) 2 bean对象的作用范围: 默认是单例的, bean标签的scope可以调整 scope取值: singleton: 单例的(默认值) prototype: 多例的 request: 作用于web应用的请求范围 session: 作用于web应用的会话范围 global-session: 作用于集群环境的会话范围(全局会话范围), 当不是集群环境时,它就是session 3 bean对象的生命周期: 单例对象: 出生: 当容器创建时对象出生 活着: 只要容器还在,对象一直活着 死亡: 容器销毁,对象消亡 死亡: 单例对象的生命周期和容器相同 多例对象: 出生: 当我们get对象的时候(使用对象)时spring框架为我们创建 活着: 对象只要是在使用过程中就一直活着 死亡: 当对象长时间不用,且没有别的对象引用时候,由Java的垃圾回收器回收

    代码托管地址: 

    https://github.com/2402zmybie/spring01

    Processed: 0.016, SQL: 9