Spring学习总结五——SpringIOC容器五

Posted 格物致知

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring学习总结五——SpringIOC容器五相关的知识,希望对你有一定的参考价值。

一:spring组件扫描

可以使用注解的方式,代替在xml配置文件配置bean,可以减少配置文件的书写,只需要在spring容器配置

文件中配置<context:component-scan base-package="com.hlcui.*"/>

但是不是只有扫描,所在包以及子包下的类都会被扫描进去,而是只有类上面标记注解的才会被扫描进spring容器

常见注解:
@Component  通用注解,  一般情况下不确定属于那一层时使用,它仅仅是将类对象扫描到spring容器中

@Repository   持久层注解,放在dao那一层

@Service        业务层注解,放在service那一层

@Controller     控制车注解,放在控制层

下面示例演示:

1:新建TestBean类,在类上面添加注解 @Component

 1 /**
 2  * 
 3  */
 4 package com.hlcui.dao;
 5 
 6 import org.springframework.stereotype.Component;
 7 
 8 /**
 9  * @author Administrator
10  * 
11  */
12 @Component
13 public class TestBean {
14     public TestBean() {
15         System.out.println("实例化bean...");
16     }
17 
18     public void execute() {
19         System.out.println("执行bean处理...");
20     }
21 }

2:在配置文件中添加

1 <!-- 组件扫描 -->
2     <context:component-scan base-package="com.hlcui"/>

3:测试方法

1 @Test
2     /**测试组件扫描*/
3     public void testTestBean(){
4         ApplicationContext ac = getApplicationContext();
5         TestBean tb = ac.getBean("testBean", TestBean.class);
6         tb.execute();
7     }

通过结果可以看出bean对象被扫描进了spring容器!

 

二:控制bean的实例化

1:创建ExampleBean1类,并且在类上面添加注解标记@Component

/**
 * 
 */
package com.hlcui.dao;
import org.springframework.stereotype.Component;

/**
 * @author Administrator
 * 
 */
@Component
public class ExampleBean1 {
    public ExampleBean1() {
        System.out.println("实例化ExampleBean1...");
    }
}

2:运行测试方法

1 @Test
2     /**测试组件扫描模式下控制bean的实例化*/
3     public void testExampleBean1(){
4         ApplicationContext ac = getApplicationContext();
5         ExampleBean1 tb1 = ac.getBean("exampleBean1", ExampleBean1.class);
6         ExampleBean1 tb2 = ac.getBean("exampleBean1",ExampleBean1.class);
7         System.out.println(tb1 == tb2);
8     }

根据结果可以看出默认情况下,是单例模式,虽然调用两次,但是是同一个对象!

3:在类上面添加@Scope("prototype")注解,然后在运行测试方法

可以看出创建了两个对象!

如果在将@Scope修改为singleton时,那么又会是单例模式了。

 

3:初始化和销毁对象

@postConstruct和@preDestroy两个注解,它们的作用就相当于在配置文件的bean元素中

添加init-method方法和destroy-method方法

 1 /**
 2  * 
 3  */
 4 package com.hlcui.dao;
 5 import javax.annotation.PostConstruct;
 6 import javax.annotation.PreDestroy;
 7 
 8 import org.springframework.context.annotation.Scope;
 9 import org.springframework.stereotype.Component;
10 
11 /**
12  * @author Administrator
13  * 
14  */
15 @Component
16 @Scope("prototype")
17 public class ExampleBean1 {
18     
19     public ExampleBean1() {
20         System.out.println("实例化ExampleBean1...");
21     }
22     
23     @PostConstruct
24     public void init(){
25         System.out.println("初始化ExampleBean1...");
26     }
27     
28     @PreDestroy
29     public void destroy(){
30         System.out.println("销毁ExampleBean1...");
31     }
32 }

 

以上是关于Spring学习总结五——SpringIOC容器五的主要内容,如果未能解决你的问题,请参考以下文章

Spring学习总结三——SpringIOC容器三

Spring学习总结二——SpringIOC容器二

Spring点滴五:Spring中的后置处理器BeanPostProcessor讲解

[Java面试五]Spring总结以及在面试中的一些问题.

Spring全面详解(学习总结)

MyEclipse Spring 学习总结一 Spring IOC容器