博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
依赖注入Bean属性
阅读量:6707 次
发布时间:2019-06-25

本文共 5377 字,大约阅读时间需要 17 分钟。

一、Bean属性依赖注入
对于类成员变量,注入方式有三种
  •构造函数注入
  •属性setter方法注入
  •接口注入
Spring支持前两种
1、构造函数 属性注入
使用构造方法注入,在Spring配置文件中,通过<contruct-arg>设置注入的属性(可以通过index或者type注入)
 
 
2、setter方法注入
 
使用setter方法注入,在Spring配置文件中,通过<property>设置注入的属性
 
 
注入一个复杂类型,通过<property> ref属性 引用其他Bean
1 package cn.itcast.spring.di; 2 //构造方法注入 3 public class Car { 4     private String name; 5     private String color; 6  7     public Car(String name, String color) { 8         super(); 9         this.name = name;10         this.color = color;11     }12 13     @Override14     public String toString() {15         return "Car [name=" + name + ", color=" + color + "]";16     }17 }18 19 package cn.itcast.spring.di;20 //setter方法注入21 public class Car2 {22     private String name;23     private String color;24 25     public void setName(String name) {26         this.name = name;27     }28 29     public void setColor(String color) {30         this.color = color;31     }32 33     @Override34     public String toString() {35         return "Car2 [name=" + name + ", color=" + color + "]";36     }37 38 }39 40 package cn.itcast.spring.di;41 42 //employee 引用一个复杂数据类型 Car243 public class Employee {44     private String name;45     private Car2 car2;46 47     public void setCar2(Car2 car2) {48         this.car2 = car2;49     }50 51     public void setName(String name) {52         this.name = name;53     }54 55     @Override56     public String toString() {57         return "Employee [name=" + name + ", car2=" + car2 + "]";58     }59 60 }61 62     
63
64
65
66
67
68
69 70
71
72
73
74
75
76 77
78
79
80
81
82

 

1 // 测试复杂类型 注入 2     @Test 3     public void demo3() { 4         ApplicationContext applicationContext = new ClassPathXmlApplicationContext( 5                 "applicationContext.xml"); 6         Employee employee = (Employee) applicationContext.getBean("employee"); 7         System.out.println(employee); 8     } 9 10     // 测试setter 方法注入11     @Test12     public void demo2() {13         ApplicationContext applicationContext = new ClassPathXmlApplicationContext(14                 "applicationContext.xml");15         Car2 car2 = (Car2) applicationContext.getBean("car2");16         System.out.println(car2);17     }18 19     // 测试构造函数属性注入20     @Test21     public void demo1() {22         ApplicationContext applicationContext = new ClassPathXmlApplicationContext(23                 "applicationContext.xml");24         Car car = (Car) applicationContext.getBean("car");25         System.out.println(car);26     }

 

3、p名称空间的使用

从spring2.5版本,为了简化 bean属性注入写法,引入p名称空间

p:<属性名>="xxx"  引入常量值

p:<属性名>-ref="xxx"  引入其他bean对象

 

使用p名称空间之前,先引用p名称空间:"xmlns:p="http://www.springframework.org/schema/p" 加入bean 元素  

1 
2
3
4

简化为:  

1 
2

4、SpEL (Spring Expression Language ) 的使用

Spring 3.0 创建了一种新的方式用以配置对象的注入(set 注入或者构造参数注入),它便是SpEL (Spring Expression Language)

语法格式 : #{...}

用法一: 向一个Bean 引用另一个Bean

1 
------ >

 

用法二: 使用另一个Bean属性 为当前Bean 属性赋值

1 public class CarInfo { 2     // 说明CarInfo 有个 name 属性 3     public String getName() { 4         return "奇瑞QQ"; 5     } 6  7     // 是一个普通方法 8     public String initColor() { 9         return "白色";10     }11 12 }
View Code 
1     
2
3
4

        car3 的name值,调用 carinfo对象 getName() 方法

       

用法三 : 使用另一个Bean 方法 ,为当前Bean 属性赋值    

1 public class CarInfo { 2     // 说明CarInfo 有个 name 属性 3     public String getName() { 4         return "奇瑞QQ"; 5     } 6  7     // 是一个普通方法 8     public String initColor() { 9         return "白色";10     }11 12 }
View Code
1      
2
3
4
5
6

        car3 的color值,有carinfo对象 initColor方法提供的

   

用法四: 读取properties 文件的值

 

5、如何向一个Bean对象 ,注入集合类型的属性

    List 、Set 、 Map 、Properties
1 // 集合Bean ,向Bean中注入 List 、 Set 、Map 、Properties 对应数据 2  3 public class CollectionBean { 4     private List
hobbies; 5 private Set
cars; 6 private Map
webSiteVisitMap; 7 private Properties employees; 8 9 public void setHobbies(List
hobbies) {10 this.hobbies = hobbies;11 }12 13 public void setCars(Set
cars) {14 this.cars = cars;15 }16 17 public void setWebSiteVisitMap(Map
webSiteVisitMap) {18 this.webSiteVisitMap = webSiteVisitMap;19 }20 21 public void setEmployees(Properties employees) {22 this.employees = employees;23 }24 25 @Override26 public String toString() {27 return "CollectionBean [hobbies=" + hobbies + ", cars=" + cars28 + ", webSiteVisitMap=" + webSiteVisitMap + ", employees="29 + employees + "]";30 }31 32 }33 34
35
36
37
38
39
体育
40
音乐
41
爬山
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
传智播客
62
黑马程序员
63
64
65
66 67 68 69 // 测试集合属性赋值70 @Test71 public void demo5() {72 ApplicationContext applicationContext = new ClassPathXmlApplicationContext(73 "applicationContext.xml");74 CollectionBean collectionBean = (CollectionBean) applicationContext75 .getBean("collectionBean");76 System.out.println(collectionBean);77 }

 

 

转载于:https://www.cnblogs.com/kingxiaozi/p/3388047.html

你可能感兴趣的文章
Linux 管理文件与目录
查看>>
使用jvisualvm 来优化eclipse启动
查看>>
杂了个谈(二)——Markdown简易教程
查看>>
【AngularJs错误】安全限制导致资源路径不可用
查看>>
正则表达式API
查看>>
IDEA-Create Git Repository
查看>>
elasticsearch-更新文档
查看>>
【示例教程】LEADTOOLS中如何用H.264压缩视频创建DICOM文件
查看>>
关于vi不能保存数据的一中解决办法
查看>>
让我们来谈谈对Linux的认识,值得每一位运维人员深读
查看>>
如何清理Docker占用的磁盘空间?
查看>>
sql中的连接查询
查看>>
java多线程之内存可见性
查看>>
vue打包报错UnhandledPromiseRejectionWarning: postcss-svgo: Error in parsing SVG的解决方案
查看>>
Angular注册Provider
查看>>
融合RocksDB, Pregel, Fault-Tolerent Foxx & Satellite Collections 怎样使数据库性能提升35%?...
查看>>
js合并单元格(相同)
查看>>
springboot(五):spring data jpa的使用
查看>>
C++17中那些值得关注的特性
查看>>
Hello, World!
查看>>