学习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;
    }
}

  

原文地址:https://www.cnblogs.com/woyujiezhen/p/11685897.html