第二章 spring
一、Bean作用域
spring容器创建的时候,会将所有配置的bean对象创建出来,默认bean都是单例的。代码通过getBean()方法从容器获取指定的bean实例,容器首先会调用Bean类的无参构造器,创建实例对象
那么?我们如何说明出bean是单例的呢?
构建出两份学生对象,执行,发现两个对象的内存地址相同,内存中只有一份

如何使它成为多例的呢?那么则需要在配置文件中添加scope="prototype"该属性即可!

scope="prototype" 原型模式(N个对象):真正使用时才会创建,每获取一次,都会创建不同对象
scope="singleton" 单例模式:容器初始化时需要使用name建,每次获取的都是同一个对象,默认值
二、基于xml的DI(Dependency Injection)
注入类型:
定义学生Student实体类和小汽车Car实体类:进行封装和生成ToString(),并自定义属性Car
|
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
public class Student {private String name;private String age;private Car car;//无参构造public Student() { //System.out.println("Student.Student()");}//带参构造public Student(String name, String age, Car car) { this.name = name; this.age = age; this.car = car;}@Overridepublic String toString() { return "Student [name=" + name + ", age=" + age + ", car=" + car + "]";}public Car getCar() { return car;}public void setCar(Car car) { this.car = car;}public String getAge() { return age;}public void setAge(String age) { this.age = age;}public String getName() { return name;}public void setName(String name) { this.name = name;}} |
Car:
|
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
32
33
34
35
36
37
38
|
public class Car {private String color;private String brand;//无参构造public Car() { }//带参构造public Car(String color, String brand) { super(); this.color = color; this.brand = brand;}@Overridepublic String toString() { return "Car [color=" + color + ", brand=" + brand + "]";}public String getColor() { return color;}public void setColor(String color) { this.color = color;}public String getBrand() { return brand;}public void setBrand(String brand) { this.brand = brand;}} |
1.1设值注入(set方法注入):本质上是调用了Bean的setXXX()进行值的注入。分为普通属性和域属性

测试类:
|
1
2
3
4
5
6
7
8
|
public class Test01 {@Testpublic void addTest(){ ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml"); Student student=(Student) ctx.getBean("stu"); System.out.println(student);} |
实现效果:

1.2构造注入

实现效果:

1.3命名空间p注入
使用前要先要在Spring配置文件中引入p命名空间

实现效果:

三、集合属性注入[List、Set、Map]
|
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
|
public class MyCollection {private List<String> list;private Set<String> set;private Map<String,String> map;public Map<String, String> getMap() { return map;}public void setMap(Map<String, String> map) { this.map = map;}public Set<String> getSet() { return set;}public void setSet(Set<String> set) { this.set = set;}public List<String> getList() { return list;}public void setList(List<String> list) { this.list = list;} |
Spring配置文件:
List与Set同理:


Map双列集合:

测试类:调用对应的方法:
|
1
2
3
4
5
6
7
8
9
10
|
public class Test01 {@Testpublic void addTest(){ ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml"); MyCollection collection=(MyCollection) ctx.getBean("collection"); //System.out.println(collection.getList()); //System.out.println(collection.getSet()); System.out.println(collection.getMap());} |

四、基于注解的DI
注:在项目中添加Spring AOP相关的JAR文件以及xsd约束文件。
由于是基于注解的DI,所以无需再Spring配置文件中进行节点配置,只需配置包扫描器即可!
配置包扫描器用途:
该包下以及子包中的类才可以被Spring扫描,去寻找被注解的类和属性,让Spring容器管理赋值

Student类:
指定@Component中的value即可在测试类中的getBean()中植入即可。
@Value为该属性赋值
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
@Component(value="stu")public class Student {@Value("呵呵") private String name;@Value("13")private String age;/* * JDK注解 @Resource(name="car2") *//* * Spring注解 */@Autowired@Qualifier(value="car2")private Car car;@Overridepublic String toString() { return "Student [name=" + name + ", age=" + age + ", car=" + car + "]";} |
Car类:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
@Component(value="car2")public class Car {@Value("黑色")private String color;@Value("奥迪")private String brand;@Overridepublic String toString() { return "Car [color=" + color + ", brand=" + brand + "]";} |
测试类:
|
1
2
3
4
5
6
7
8
9
|
public class Test01 {@Testpublic void addTest(){ ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml"); Student student=(Student) ctx.getBean("stu"); System.out.println(student);}} |
实现效果:

等价于@Component的注解:
@Component[不分层的情况下]
@Repository() [Dao层]
@Service() [Biz层]
@Controller() [Action类]
第二章 spring的更多相关文章
- Spring学习指南-第二章-Spring框架基础(完)
第二章 Spring框架基础 面向接口编程的设计方法 在上一章中,我们看到了一个依赖于其他类的POJO类包含了对其依赖项的具体类的引用.例如,FixedDepositController 类包含 ...
- 第二章 Spring MVC入门
2.1.Spring Web MVC是什么 Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职 ...
- [翻译]Spring框架参考文档(V4.3.3)-第二章Spring框架介绍 2.1 2.2 翻译--2.3待继续
英文链接:http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/overview.ht ...
- java并发学习--第二章 spring boot实现线程的创建
除了之前介绍的创建线程方式外,spring boot为我们了提供一套完整的线程创建方式,其中包括了:线程.线程池.线程的监控. 一.使用spring boot提供的方法创建线程与线程池 1.首先在sp ...
- 第二章 Spring MVC入门 —— 跟开涛学SpringMVC 读后感1
2.1.Spring Web MVC是什么 Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职 ...
- Spring 3.x 实践 第一个例子(Spring 3.x 企业应用开发实战读书笔记第二章)
前言:工作之后一直在搞android,现在需要更多和后台的人员交涉,技术栈不一样,难免鸡同鸭讲,所以稍稍学习下. 这个例子取自于<Spring 3.x 企业应用开发实战>一书中的第二章,I ...
- #Spring实战第二章学习笔记————装配Bean
Spring实战第二章学习笔记----装配Bean 创建应用对象之间协作关系的行为通常称为装配(wiring).这也是依赖注入(DI)的本质. Spring配置的可选方案 当描述bean如何被装配时, ...
- 第三章 Spring.Net 环境准备和搭建
在前面一章我们介绍了依赖注入,控制反转的概念.接下来我们来真正动手搭建一下Spring.Net的环境,看一下Spring.Net 中的控制反转和依赖注入是什么样子. 3.1 Spring.Net 下 ...
- Java Persistence with MyBatis 3(中文版) 第二章 引导MyBatis
MyBatis最关键的组成部分是SqlSessionFactory,我们可以从中获取SqlSession,并执行映射的SQL语句.SqlSessionFactory对象可以通过基于XML的配置信息或者 ...
随机推荐
- Java中, for循环经典例子
循环的两种应用:穷举和迭代. break跳出整个循环 一.穷举:将所有可能的情况都走一遍,用if筛选出符合条件. 百鸡百钱: 一只公鸡1文钱,一只母鸡2文钱,一只小鸡半文钱,需要买100只鸡, 正好花 ...
- 超简单的激活Microsoft Office 2016 for Mac 方法
1.简介: 2016年9月14日更新本博客,激活工具同样适用于Office 15.25(160817)版本.我此前在国外网站上找到一个App,下载之后运行,直接点击一个黑色开锁的标识按钮,输入系统密码 ...
- linux下的目录结构和内容
用了这么长时间linux系统,有时候哪个文件应该在哪还是不知道的,所以对于根下的目录结构记下: /bin bin是Binary的缩写.这个目录存放着最经常使用的命令. /boot这里存放的是启动Lin ...
- JAVA理解逻辑程序的书上全部重要的习题
今天随便翻翻看以前学过JAVA理解逻辑程序的书上全部练习,为了一些刚学的学弟学妹,所以呢就把这些作为共享了. 希望对初学的学弟学妹有所帮助! 例子:升级“我行我素购物管理系统”,实现购物结算功能 代码 ...
- JavaScript变换表格边框颜色
效果查看:http://hovertree.com/texiao/js/2.htm 代码如下,保存到HTML文件也可以查看效果: <html> <head> <meta ...
- placeholder不兼容 IE10 以下版本的解决方法
对于密码输入框placeholder的兼容问题:HTML代码:<input type="password" id="loginPassword" plac ...
- CSS布局基础——BFC
what's BFC? 第一次看到这个名词,我是拒绝的,css什么时候还有这个东西?于是迫不及待的google了一下,才发现原来它无时无刻不在我们的css当中,只不过它并不是一个属性,不需要我们平常使 ...
- 关于ArcGIS API for JavaScript中basemap的总结介绍(一)
实际上basemap这个概念并不只在arcgis中才有,在Python中有一个matplotlib basemap toolkit(https://pypi.python.org/pypi/basem ...
- 清理iOS工程里无用的图片,可瘦身ipa
工程在经过多人后,往往会出现较多的垃圾,导致打包出来的ipa文件偏大,有时候我们会通过清理代码来给程序瘦身,而瘦身ipa效果明显的,主要通过清理程序里的无用图片. 推荐一个清理图片的应用 https: ...
- (六)Maven之pom.xml文件简单说明
通过前面几部分知识,我们对maven已经有了初步的印象,就像Make的Makefile.Ant的build.xml一样,Maven项目的核心是pom.xml.POM(Project Object Mo ...