zoukankan      html  css  js  c++  java
  • 学习spring的第一天

    1.首先在maven repository中找到Spring Context依赖添加进模块

    2.配置xml,resources右键new→xml configuration file→Spring Config,例如取一个名字为applicationConfig.xml。该文件是元数据,再次文件里通过一个个的bean告诉spring管理那些类,这些类必须是要能够实例化的,接口和抽象类就不行

    3.开始在xml中配置元素标签。

     3.1<bean>,有属性如下,id:在java代码中通过getBean("id")来得到对象,

     3.2 class:指定全称,表面这个bean取得的对象是什么类的,并且其destroy-method和init-method方法只能在此类中寻找

     3.3 scope: 有4种,分别为prototype(原型,每次getBean的时候都重新创建一个),singleton(单例,同时也是默认的,在spring容器启动时就被创建,每次getBean的时候都从容器中获取,具体的java代码是:ApplicationContext context = new ClassPathXmlApplicationContext("applicationConfig.xml");),request(请求,它和session都是在web中才有用,被spring管理的bean,它的请求都在一个完整的请求周期里),session(会话,在一个会话里)

     3.4 factory-method:工厂方法,调用在class属性中的类中有的方法,使得getBean的返回值可以为该方法的返回值类型。

     3.5 destroy-method和init-method:销毁方法和初始化方法,调用class属性的类中有的方法,在初始化和销毁阶段会调用对应的方法。同时可以在<beans>标签中写全局的销毁和初始化方法,default-init-method和default-destroy-method,但是他们会被<bean>中的覆盖,同时,只有<bean>中的class属性的类中有这2个全局属性的方法时,才会调用。

     3.6 factory-bean:先创建一个<bean>,用该<bean>的id作为属性值,配合factory-method属性,该属性是方法名。

    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"
            default-destroy-method="ss" default-init-method="ss">
    
        <bean id="first" class="com.util2.EmployeeDao" factory-method="getEmployee" scope="prototype"></bean>
    
        <bean id="second" class="com.util2.EmployeeDao" scope="prototype"></bean>
    
        <bean id="third" factory-bean="second" factory-method="getEmployee1" scope="prototype"></bean>
    
        <bean id="fourth" class="com.util2.EmployeeImpl" scope="prototype" ></bean>
    
        <bean id="emp" class="com.util.EmployeeDao" scope="prototype"></bean>
    
    </beans>
    

      

    4.java代码实例:关于getBean方法是有重载的,也有一个参数的写法,不过没有指明具体的Class对象,返回值是Object

    public static void main(String[] args) {
            ApplicationContext context = new ClassPathXmlApplicationContext("applicationConfig2.xml");
            Employee first = context.getBean("first", Employee.class);
            System.out.println((Employee)context.getBean("first"));
            System.out.println(first);
            Employee third = context.getBean("third", Employee.class);
            System.out.println(third);
            EmployeeDao second = context.getBean("second", EmployeeDao.class);
            System.out.println(second);
            Employee fourth = context.getBean("fourth", Employee.class);//1,2,4不一样
            com.util.EmployeeDao employeeDao = (com.util.EmployeeDao) context.getBean("emp");
            System.out.println(fourth);
    ((ConfigurableApplicationContext) context).close();
     }

      其中可以将ApplicationContext转型为ConfigurableApplicationContext以启用close方法,测试xml中的destroy-method方法。

    5.补充:今天还学了三个实现接口:一个是FactoryBean<T>,InitializingBean,DisposableBean,具体用法可以自己写个类实现以下,看看需要重写哪些方法,很容易理解。

    示例:

    public class EmployeeDaoLifeCycle2 implements InitializingBean, DisposableBean {
        /**
         * 这个方法名取名叫:"在属性设置完毕之后"
         * 其意思就是此类中各种setter方法被调用后
         * 才调用这个初始化方法
         * @throws Exception
         */
        public void afterPropertiesSet() throws Exception {
            System.out.println("after properties set :初始化");
        }
    
        public void destroy() throws Exception {
            System.out.println("destroy---");
    
        }
    

      

    public class MyFactoryBean implements FactoryBean<A> {
        /**
         * 这个方法用来创建一个对象
         * @return
         * @throws Exception
         */
        public A getObject() throws Exception {
            return new A();
        }
    
        /**
         * 这个方法是用来表明此工厂Bean创建出来的对象的class
         * @return
         */
        public Class<?> getObjectType() {
            return A.class;
        }
    
        /**
         * 这个方法表明此工厂Bean创建出来的对象,在spinrg管理下的作用域
         * true表示是singleton
         * @return
         */
        public boolean isSingleton() {
            return true;
        }
    }
    

      

  • 相关阅读:
    【考试反思】联赛模拟测试16
    【考试反思】联赛模拟测试15
    【考试反思】联赛模拟测试14
    【考试反思】联赛模拟测试13
    【学习笔记】震惊,全机房都会分块了,就我没有
    挂分宝典
    「计数」客星璀璨之夜 + 大佬
    第五阶段反思
    「板子」线段树维护单调栈
    阶段反思
  • 原文地址:https://www.cnblogs.com/woyujiezhen/p/11685897.html
Copyright © 2011-2022 走看看