学习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代码示例如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?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

1
2
3
4
5
6
7
8
9
10
11
12
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,具体用法可以自己写个类实现以下,看看需要重写哪些方法,很容易理解。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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---");
 
    }

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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;
    }
}

  

posted on   我欲皆真  阅读(215)  评论(2编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示