Spring(一)--作用、IOC容器细节、搭配环境、Spring实验
1.生态体系庞大,全能型选手!【springmvc是其一个子模块,jdbcTemplate能直接操作数据库!】
2.将其他组件粘合在一起
比如将SpringMVC和Mybaits连在一起
3.包括:IOC容器和AOP【面向切面编程】
Spring的IOC机制(控制反转和依赖注入)正是用在此处。
Spring的IOC(控制反转和依赖注入)
控制反转[IOC]:就是由容器控制程序之间的(依赖)关系,而非传统实现中,由程序代码直接操控。
控制反转是一种思想,其具体实现就是依赖注入!
1.使用IOC容器创建对象
2.使用IOC容器在创建对象的同时,给对象的属性赋值
1.导入IOC容器需要的jar包
spring-beans-4.0.0.RELEASE.jar
spring-context-4.0.0.RELEASE.jar
<!-- class指定类对象的全类名,交给服务器创建一个对象 id是一个唯一标识,在IOC只能出现一个id为book的bean对象 -->
<bean id="book" class="com.neuedu.spring.bean.Book">
<property name="bookName" value="JAVA"></property>
<property name="author" value="you"></property>
<property name="price" value="123.123"></property>
</bean>
public class TestIOC {
@Test
public void test() {
//1.获取IOC容器本身这个对象
ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
//2.从IOC容器中获取bean对象
Object bean = ioc.getBean("book");
System.out.println(bean);
}
}
①IOC容器本身对象创建时,会将配置文件中配置好的bean先创建出来
②默认是单实例的,只创建bean的一个对象
③如果设置bean的scope属性为prototype,那么创建bean的对象就是多实例的,在获取的时候创建,每次获取对象都会创建新的
④.从IOC容器中获取对象
①根据bean的id获取
1.指的是在bean的初始化方法前后执行操作的专门的对象。
2.自定义的后置处理器:
1) 需要实现接口:org.springframework.beans.factory.config.BeanPostProcessor .
2) 做相应的配置就好!
public class TestIOC {
@Test
public void test() {
//1.获取IOC容器本身这个对象
ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
//2.从IOC容器中获取bean对象
Book bean = ioc.getBean(Book.class);
System.out.println(bean.getBookName()+"---"+bean.getAuthor()+"---"+bean.getPrice());
}
}
要注意,创建实体类的时候要有无参构造器,没有无参的话会默认有一个无参构造器,但是这时要是有一个有参构造器,就构建不成对象,获取不到bean实例。
<bean id="book01" class="com.neuedu.spring.bean.Book">
<constructor-arg value="you" index="1"></constructor-arg>
<constructor-arg value="C++" index="0"></constructor-arg>
<constructor-arg value="22.22" index="2" type="double"></constructor-arg>
</bean>

public class StudentController {
private StudentService studentService;
public StudentService getStudentService() {
return studentService;
}
public void setStudentService(StudentService studentService) {
this.studentService = studentService;
}
@Override
public String toString() {
return "StudentController [studentService=" + studentService + "]";
}
}
public class StudentService {
private StudentDao studentDao;
public StudentDao getStudentDao() {
return studentDao;
}
public void setStudentDao(StudentDao studentDao) {
this.studentDao = studentDao;
}
@Override
public String toString() {
return "StudentService [studentDao=" + studentDao + "]";
}
}
public class StudentDao {
private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Override
public String toString() {
return "StudentDao [username=" + username + "]";
}
}
<!-- 给bean的级联属性赋值 -->
<bean id="studentDao" class="com.neuedu.spring.bean.StudentDao"></bean>
<bean id="studentService" class="com.neuedu.spring.bean.StudentService"></bean>
<bean id="studentController" class="com.neuedu.spring.bean.StudentController">
<property name="studentService" ref="studentService"></property>
<property name="studentService.studentDao" ref="studentDao"></property>
<property name="studentService.studentDao.username" value="zhangsan"></property>
</bean>
public class TestIOC {
@Test
public void test() {
//1.获取IOC容器本身这个对象
ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
//2.从IOC容器中获取bean对象
Object bean = ioc.getBean("studentController");
System.out.println(bean);
}
}
<!-- 通过p名称空间为bean赋值 -->
<bean id="student" class="com.neuedu.spring.bean.Student"
p:name="zhangsan"
p:gender="1"
p:address="China"
>
</bean>
<!-- 测试bean的作用域,分别创建单实例和多实例的bean -->
<bean id="book2" scope="singleton" class="com.neuedu.spring.bean.Book"></bean>
<bean id="student2" scope="prototype" class="com.neuedu.spring.bean.Student"></bean>
显示 一个book ,三个 student
public class TestIOC {
//1.获取IOC容器本身这个对象
private ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
@Test
public void test() {
ioc.getBean("book");
ioc.getBean("book");
ioc.getBean("book");
ioc.getBean("student");
ioc.getBean("student");
ioc.getBean("student");
}
}
<bean id="book" class="com.neuedu.spring.bean.Book"></bean>
<bean id="student" class="com.neuedu.spring.bean.Student"></bean>
public class TestIOC {
private ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
@Test
public void test() {
}
}
<bean id="teacher" class="com.neuedu.spring.bean.Teacher" init-method="teacherinit" destroy-method="destroy"></bean>
但是调用不了 destroy 方法,通过 ApplicationContext 的子类的 close 方法调用 destroy 方法
public class TestIOC {
private ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
@Test
public void test() {
ConfigurableApplicationContext cac = (ConfigurableApplicationContext) ioc;
ioc.getBean("teacher");
cac.close();
}
}
<bean id="book" class="com.neuedu.spring.bean.Book" depends-on="student"></bean>
<bean id="student" class="com.neuedu.spring.bean.Student" ></bean>
<bean id="teacher" class="com.neuedu.spring.bean.Teacher" init-method="teacherinit" destroy-method="destroy"></bean>
<bean id="book" class="com.neuedu.spring.bean.Book">
<property name="bookName" value="JAVA"></property>
<property name="author" value="you"></property>
<property name="price" value="43.43"></property>
<property name="isbn" value="home"></property>
</bean> <bean id="book1" class="com.neuedu.spring.bean.Book" parent="book">
<property name="price" value="34.23"></property>
<property name="isbn" value="house"></property>
</bean>
<bean id="book" class="com.neuedu.spring.bean.Book" abstract="true">
<property name="bookName" value="JAVA"></property>
<property name="author" value="you"></property>
<property name="price" value="43.43"></property>
<property name="isbn" value="home"></property>
</bean> <bean id="book1" parent="book">
<property name="price" value="43.43"></property>
<property name="isbn" value="home"></property>
</bean>
<bean id="book" class="com.neuedu.spring.bean.Book">
<property name="bookName" value="java"></property>
<property name="price" value="33.5"></property>
<property name="isbn" value="house"></property>
</bean>
也可以这么写,将<null/> 写进<property> 中
<bean id="book" class="com.neuedu.spring.bean.Book">
<property name="bookName" value="java"></property>
<property name="author">
<null/>
</property>
<property name="price" value="33.5"></property>
<property name="isbn" value="house"></property>
</bean>
<bean id="book" class="com.neuedu.spring.bean.Book">
<property name="bookName" value="java"></property>
<property name="isbn" value="house"></property>
</bean>
<bean id="bookShop" class="com.neuedu.spring.bean.BookShop">
<property name="address" value="河北"></property>
<property name="book" ref="book"></property>
</bean>
<bean id="bookShop" class="com.neuedu.spring.bean.BookShop">
<property name="address" value="河北"></property>
<property name="book">
<bean class="com.neuedu.spring.bean.Book">
<property name="bookName" value="java"></property>
<property name="author" value="you"></property>
<property name="price" value="43.32"></property>
<property name="isbn" value="house"></property>
</bean>
</property>
</bean>
<bean id="book1" class="com.neuedu.spring.bean.Book">
<property name="bookName" value="java"></property>
</bean>
<bean id="book2" class="com.neuedu.spring.bean.Book">
<property name="author" value="you"></property>
</bean>
<bean id="book3" class="com.neuedu.spring.bean.Book">
<property name="price" value="43.43"></property>
</bean>
<bean id="book4" class="com.neuedu.spring.bean.Book">
<property name="isbn" value="home"></property>
</bean>
<bean id="bookShop" class="com.neuedu.spring.bean.BookShop">
<property name="bookList">
<list>
<ref bean="book1"/>
<ref bean="book2"/>
<ref bean="book3"/>
<ref bean="book4"/>
</list>
</property>
</bean>
public class TestIOC {
private ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
@Test
public void test() {
BookShop bean = ioc.getBean(BookShop.class);
List<Book> bookList = bean.getBookList();
for(Book book : bookList){
System.out.println(book);
}
}
}

<bean id="bookShop" class="com.neuedu.spring.bean.BookShop">
<property name="bookMap">
<map>
<entry>
<key>
<value>book1</value>
</key>
<ref bean="book1"/>
</entry>
<entry>
<key>
<value>book2</value>
</key>
<ref bean="book2"/>
</entry>
<entry>
<key>
<value>book3</value>
</key>
<ref bean="book3"/>
</entry>
<entry>
<key>
<value>book4</value>
</key>
<ref bean="book4"/>
</entry>
</map>
</property>
</bean>
用 .entry 遍历 map 集合
public class TestIOC {
private ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
@Test
public void test() {
BookShop bean = ioc.getBean(BookShop.class);
Map<String, Book> bookMap = bean.getBookMap();
Set<Entry<String,Book>> entrySet = bookMap.entrySet();
for (Entry<String, Book> entry : entrySet) {
System.out.println(entry.getKey()+"==="+entry.getValue());
}
}
}
<bean id="bookShop" class="com.neuedu.spring.bean.BookShop">
<property name="p">
<props>
<prop key="book1">value1</prop>
<prop key="book2">value2</prop>
<prop key="book3">value3</prop>
<prop key="book4">value4</prop>
</props>
</property>
</bean>
public class TestIOC {
private ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
@Test
public void test() {
BookShop bean = ioc.getBean(BookShop.class);
java.util.Properties p = bean.getP();
System.out.println(p.get("book1"));
System.out.println(p.get("book2"));
System.out.println(p.get("book3"));
System.out.println(p.get("book4"));
}
}
Spring(一)--作用、IOC容器细节、搭配环境、Spring实验的更多相关文章
- Spring.NET的IoC容器(The IoC container)——简介(Introduction)
简介 这个章节介绍了Spring Framework的控制反转(Inversion of Control ,IoC)的实现原理. Spring.Core 程序集是Spring.NET的 IoC 容器实 ...
- Spring之一:IoC容器体系结构
温故而知心. Spring IoC概述 常说spring的控制反转(依赖反转),看看维基百科的解释: 如果合作对象的引用或依赖关系的管理要由具体对象来完成,会导致代码的高度耦合和可测试性降低,这对复杂 ...
- 比Spring简单的IoC容器
比Spring简单的IoC容器 Spring 虽然比起EJB轻量了许多,但是因为它需要兼容许多不同的类库,导致现在Spring还是相当的庞大的,动不动就上40MB的jar包, 而且想要理解Spring ...
- Ioc容器依赖注入-Spring 源码系列(2)
Ioc容器依赖注入-Spring 源码系列(2) 目录: Ioc容器beanDefinition-Spring 源码(1) Ioc容器依赖注入-Spring 源码(2) Ioc容器BeanPostPr ...
- 使用Spring.NET的IoC容器
使用Spring.NET的IoC容器 0. 辅助类库 using System; using System.Collections.Generic; using System.Linq; using ...
- 【Spring】Spring之向 IOC 容器注入对象的三种方式
关于Spring的搭建可参见:浅析Spring框架的搭建.在测试之前还是应该先将环境配置好,将相关Jar包导进来.Spring创建的对象,默认情况下都是单例模式,除非通过scope指定. 向IOC容器 ...
- Spring Framework之IoC容器
Spring IoC 概述 问题 1.什么是依赖倒置? 2.什么是控制反转? 3.什么是依赖注入? 4.它们之间的关系是怎样的? 5.优点有哪些? 依赖倒置原则 (Dependency Inversi ...
- Spring框架学习[IoC容器高级特性]
1.通过前面4篇文章对Spring IoC容器的源码分析,我们已经基本上了解了Spring IoC容器对Bean定义资源的定位.读入和解析过程,同时也清楚了当用户通过getBean方法向IoC容器获取 ...
- Spring框架及IOC容器
Spring是一个非常活跃的开源框架, 它是一个基于IOC和AOP来构架多层JavaEE系统的框架,它的主要目地是简化企业开发.Spring以一种非侵入式的方式来管理你的代码, Spring提倡”最少 ...
随机推荐
- 最小生成树之Prim算法和Kruskal算法
最小生成树算法 一个连通图可能有多棵生成树,而最小生成树是一副连通加权无向图中一颗权值最小的生成树,它可以根据Prim算法和Kruskal算法得出,这两个算法分别从点和边的角度来解决. Prim算法 ...
- 华为OJ之自动售货系统
本题主要难点有两部分: 1,找零算法.如何找零应该是最具技巧性的部分,根据已有的硬币金额分布,对应的解决办法可能会有不同.本题中的1,2,5,10这种情况满足贪心性质,故我们简单的用贪心算法的思想来解 ...
- Java面向对象之抽象类,接口
抽象类: 含有抽象方法的类被声明为抽象类 抽象方法由子类去实现 含有抽象方法的类必须被声明为抽象类 抽象类被子类继承,子类(如果不是抽象类)必须重写抽象类中的所有抽象方法 抽象方法: 声明而未被实现的 ...
- C#中的数据类型转换
数据类型在一定的条件下是可以相互转换的,如将int型数据转换成double型数据.C#允许使用两种转换方式:隐式转换和显式转换. 1.隐式转换 隐式转换:从类型A到类型B的转换可以在所有情况下进行,执 ...
- ue4粒子实现流血效果
---恢复内容开始--- 动作/射击游戏中,击中角色时常常伴随着血花效果,增强打击感的同时,也方便了玩家对命中与否的判断. 血液效果分两块,首先是受伤部位在受击瞬间产生血雾粒子,然后在身体.地面.墙面 ...
- C#控制台应用程序之旅游资源与线路管理系统
利用C#语言及SQL Server数据库编写的一个简化版旅游资源与线路管理系统 数据库中包含三张表:hotel表.tourist_spot表.lines表 用户分为管理员和普通用户,管理员拥有最高权限 ...
- Java中实现十进制数转换为二进制的三种思路
Java中实现十进制数转换为二进制 第一种:除基倒取余法 这是最符合我们平时的数学逻辑思维的,即输入一个十进制数n,每次用n除以2,把余数记下来,再用商去除以2...依次循环,直到商为0结束,把余数倒 ...
- cmd命令行进入DOS方式编译运行C语言程序实现字符串转换
需求:输入一个字符串(长度小于50),然后过滤掉所有的非数字字符,得到由数字字符组成的字符串,将其转化为double型结果输出(4位小数). 源程序: #include<stdio.h>i ...
- NYOJ--32--SEARCH--组合数
按照思路写:深搜,r控制位数,位数为0输出否则递归 /* Name: NYOJ--32--搜索--组合数 Date: 14/04/17 16:48 Description: 深度优先搜索 */ #in ...
- Oracle 11.2.0.1 ADG环境MRP进程遭遇ORA-600异常终止
环境:Linux + Oracle 11.2.0.1 ADG 现象:发现备库没有应用日志 1. 数据库查询备库目前状态 发现备库目前没有应用日志,apply lag已经显示备库有3天21小时多没有应用 ...