Bean的生命周期和创建方式
2018-09-13 20:37 kill-9 阅读(403) 评论(0) 编辑 收藏 举报 1 package spring;
2
3
4 import org.springframework.context.support.ClassPathXmlApplicationContext;
5
6 import java.util.Calendar;
7
8 public class Circle {
9
10 private double radius;
11 private double peri;
12 private double area;
13
14 public double getRadius() {
15 return radius;
16 }
17
18 public void setRadius(double radius) {
19 this.radius = radius;
20 }
21
22 public double getPeri() {
23 return peri;
24 }
25
26 public void setPeri(double peri) {
27 this.peri = peri;
28 }
29
30 public double getArea() {
31
32 Calendar calendar = Calendar.getInstance();
33 return area;
34 }
35
36 public void setArea(double area) {
37 this.area = area;
38 System.out.println("执行Circle的setArea方法...");
39 }
40
41
42
43 public Circle(double radius) {
44 this.radius = radius;
45 System.out.println("执行Circle构造方法...");
46 }
47
48 @Override
49 public String toString() {
50 return "Circle{" +
51 "radius=" + radius +
52 ", peri=" + peri +
53 ", area=" + area +
54 '}';
55 }
56
57
58 public void init(){
59 System.out.println("执行Circle对象初始化...");
60 }
61
62
63 public void destroy(){
64 System.out.println("执行Circle对象销毁...");
65 }
66
67
68 public static void main(String[] args){
69 ClassPathXmlApplicationContext cc = new ClassPathXmlApplicationContext("classpath:spel.xml");
70 Circle life = cc.getBean("life",Circle.class);
71 System.out.println(life);
72 cc.close();
73 }
74
75
76 }
1 package spring.annotation;
2
3 import org.springframework.stereotype.Component;
4
5 @Component
6 public class AutoBean {
7
8 private String info = "AutoBean";
9
10 public String getInfo() {
11 return info;
12 }
13
14 public void setInfo(String info) {
15 this.info = info;
16 }
17
18 @Override
19 public String toString() {
20 return "AutoBean{" +
21 "info='" + info + '\'' +
22 '}';
23 }
24 }
1 package spring.annotation;
2
3 import org.springframework.stereotype.Component;
4
5
6 @Component(value = "component")
7 public class DemoComponent {
8
9 public void print(){
10 System.out.println(this.getClass().getName());
11 }
12
13
14 }
1 package spring.annotation;
2
3 import org.springframework.beans.factory.annotation.Autowired;
4 import org.springframework.stereotype.Controller;
5
6 @Controller(value = "controller")
7 public class DemoController {
8
9
10 @Autowired
11 private AutoBean bean;
12
13 public void print(){
14 System.out.println(this.getClass().getName());
15 System.out.println(bean);
16 }
17
18
19 }
1 package spring.annotation;
2
3 import org.springframework.stereotype.Controller;
4 import org.springframework.stereotype.Repository;
5
6 @Repository(value = "repository")
7 public class DemoRepository{
8
9 public void print(){
10 System.out.println(this.getClass().getName());
11 }
12
13
14 }
1 package spring.annotation;
2
3 import org.springframework.stereotype.Controller;
4 import org.springframework.stereotype.Service;
5
6 @Service(value = "service")
7 public class DemoService {
8
9 public void print(){
10 System.out.println(this.getClass().getName());
11 }
12
13
14 }
spring配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--
bean的生命周期[Spring IOC容器管理]
- 通过构造器或者工厂方法创建Bean的实例
- 为Bean的属性设置值或者引用其他的Bean
- 调用Bean的初始化方法
- 使用Bean
- 容器关闭时,调用Bean的销毁方法
-->
<!--定义Bean的初始化和销毁方法-->
<!--构造方法创建Bean-->
<!--<bean id="life" class="spring.Circle" init-method="init" destroy-method="destroy">-->
<!--<constructor-arg name="radius" value="40"/>-->
<!--<property name="area" value="#{T(java.lang.Math).PI * circle.radius^2}"/>-->
<!--</bean>-->
<!--静态方法创建Bean-->
<bean id="calendar" class="java.util.Calendar" factory-method="getInstance"/>
<!--通过工厂bean的普通方法创建Bean-->
<bean id="time" factory-bean="calendar" factory-method="getTime"/>
<!--
通过FactoryBean配置Bean的实例
class指向FactoryBean的全类名
property配置FactoryBean的属性
实际返回的是FactoryBean的getObject()方法返回的实例
-->
<bean id="factoryBean" class="spring.DemoFactoryBean">
<property name="mod" value="#{T(java.lang.Math).ceil(T(java.lang.Math).random()*101)}"/>
</bean>
<!--通过注解扫描创建Bean-->
<!--resource-pattern 只扫描特定的文件或者包-->
<!--<context:component-scan base-package="spring" resource-pattern="annotation/DemoService.class" />-->
<context:component-scan base-package="spring.annotation" use-default-filters="true">
<!--<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Component"/>-->
<!--<context:include-filter type="annotation" expression="org.springframework.stereotype.Component"/>-->
<!--从扫描包中排除指定的类或者接口-->
<context:exclude-filter type="assignable" expression="spring.annotation.DemoComponent"/>
<!--<context:include-filter type="assignable" expression="spring.annotation.DemoComponent"/>-->
</context:component-scan>
</beans>