Spring学习(二)
IoC
1、Inverse of Control ,控制反转(控制权的翻转)
2、控制:对对象的创建、对对象的属性赋值等一系列操作本来应该是我们做的事情
Java Application :
Date birthdate = new Date();
Student s = new Student();
s.setId( 1001 );
s.setName( "张三丰" );
s.setGender( '男' ) ;
s.setBirthdate( birthdate )
类似于自己在家吃饭得自己动手做
3、反转:
- 将对对象的创建、为属性赋值等操作的权限反转给容器,通常我们将控制权反转给Ioc container(ioc 容器)
- Java程序中自主控制权限,包括创建对象,设置对象的值。逆转交给容器来做,做之前交给容器来做,文件名和路径没有要求
spring 容器 读取配置文件生产相应的对象, Configuration Metadata ( "配置元数据" ) 用来 "告诉" Spring IoC 容器怎么产生对象,你的业务对象如果我们依赖于另一个对象,需要拿过来的时候,那个对象就是你的业务对象。类似去外面吃饭,spring容器相当于一个厨房,配置元数据相当于普通的材料,你的业务对象相当于特殊要求,例如加辣椒,由”厨房”做好之后直接吃就好了。
Spring Bean Configuration File :
<bean id="d" class="java.util.Date" />
<bean id="s" class="io.spring.ioc.base.Student" >
<property name="id" value="1001" />
<property name="name" value="张三丰" />
<property name="gender" value="男" />
<property name="birthdate" ref="d" />
</bean>
id为d的bean就是你的业务对象
Spring IoC Container :
//指定configuration metadata配置元数据
String configLocations = "classpath:ecut/**/base/ioc.xml" ;
//创建spring IOC容器,在容器创建的时候调用无参构造
AbstractApplicationContext container = new ClassPathXmlApplicationContext( configLocations );
//ready for use (此时可以从指定的IOC容器中获取指定名称的bean实例了)
Student s = container.getBean( "s" , Student.class );
//从容器中获取的bean实例中获取属性值
System.out.println( s.getId() );
BeanFactory就表示一个ioc容器,XmlBeanFactory是BeanFactory的实现类。
ApplicationContext是BeanFactory的子接口,ClassPathXmlApplicationContext是ApplicationContext的实现类。
WebApplicationContext是ApplicationContext的子接口,XmlWebApplicationContext是WebApplicationContext的实现类。
4、测试案例
Student类
package ecut.ioc.base; import java.util.Date; public class Student { private Integer id;
private String name;
private char gender;
private Date birthdate; public Student() {
super();
System.out.println( "调用 Student 无参构造创建对象" );
} public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
System.out.println( "为id属性赋值: " + id );
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public char getGender() {
return gender;
} public void setGender(char gender) {
this.gender = gender;
} public Date getBirthdate() {
return birthdate;
} public void setBirthdate(Date birthdate) {
this.birthdate = birthdate;
System.out.println( "为birthdate属性赋值: " + birthdate );
} }
ioc.xml(Spring Bean Configuration File)名称不一定需要交applicationContext.xml,可以安装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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd"> <bean id="d" class="java.util.Date" /> <bean id="s" class="ecut.ioc.base.Student">
<property name="id" value="1001" />
<property name="name" value="张三丰" />
<property name="gender" value="男" />
<property name="birthdate" ref="d" />
</bean> <!-- <bean id="s" class="io.spring.ioc.base.Student">
<property name="id" value="1001" />
<property name="name" value="张三丰" />
<property name="gender" value="男" />
<property name="birthdate" >
<bean class="java.util.Date" />
</property>
</bean>--> </beans>
测试类
package ecut.ioc.base; import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestSpringContainer { public static void main(String[] args) {
//指定configuration metadata配置元数据
String configLocations = "classpath:ecut/**/base/ioc.xml" ;
//创建spring IOC容器,在容器创建的时候调用无参构造
AbstractApplicationContext container = new ClassPathXmlApplicationContext( configLocations );
//ready for use (此时可以从指定的IOC容器中获取指定名称的bean实例了)
Student s = container.getBean( "s" , Student.class );
//从容器中获取的bean实例中获取属性值
System.out.println( s.getId() ); System.out.println( s.getName() ); System.out.println( s.getGender() ); System.out.println( s.getBirthdate() );
//关闭spring的IOC容器
container.close(); } }
classpath是指当前工程下bin目录,/**/指多级目录
转载请于明显处标明出处
https://www.cnblogs.com/AmyZheng/p/9249411.html
Spring学习(二)的更多相关文章
- spring学习(二) ———— AOP之AspectJ框架的使用
前面讲解了spring的特性之一,IOC(控制反转),因为有了IOC,所以我们都不需要自己new对象了,想要什么,spring就给什么.而今天要学习spring的第二个重点,AOP.一篇讲解不完,所以 ...
- spring学习二:jdbc相关回顾以及spring下dao
目录: Part一:回顾java web部分的jdbc.事务.连接池和dbutils工具等 : Part二:spring的JdbcTemplate使用: Part三:spring的事务处理: Part ...
- Spring学习二
Spring的表达式语言 SpEL,使用方法是#{} SpEL的特性如下 使用Bean 的ID 来引用Bean : 调用方法和访问对象的属性: 对值进行算术.关系和逻辑运算: 正则表达式匹配: 集合操 ...
- Spring学习(二)-----eclipse新建spring项目
一:准本工作(下载需要的jar包) 1.下载准备Spring-framework-4.2.0 链接为: http://repo.springsource.org/libs-release-local/ ...
- Spring 学习二-----AOP的原理与简单实践
一.Spring AOP的原理 AOP全名Aspect-Oriented Programming,中文直译为面向切面(方面)编程.何为切面,就比如说我们系统中的权限管理,日志,事务等我们都可以将其看 ...
- Spring学习(二)--装配Bean
一.Spring装配机制 Spring提供了三种主要的装配机制: 1.在XML中进行显示配置 2.在Java中进行显示配置 3.隐式的bean发现机制和自动装配--自动化装配bean Spring可以 ...
- Spring学习(二):Spring支持的5种Bean Scope
序言 Scope是定义Spring如何创建bean的实例的.Spring容器最初提供了两种bean的scope类型:singleton和prototype,但发布2.0以后,又引入了另外三种scope ...
- spring 学习 二 IOC/DI
中文名称:控制反转 英文名称:( Inversion of Control ) 1 控制反转作用: 一般在编写java程序时,需要程序员自己创建对象的实例,例如 A a=new A();语句,就是程序 ...
- Spring学习二----------IOC及Bean容器
© 版权声明:本文为博主原创文章,转载请注明出处 接口 用于沟通的中介物的抽象化 实体把自己提供给外界的一种抽象化说明,用以由内部操作分离出外部沟通方法,使其能被修改内部而不影响外界其他实体与其交互的 ...
随机推荐
- 使用docker容器时遇到的2个问题
最近项目在centOS7服务器上用docker部署了几个服务,在运行的时候发现,总是过一段时间,容器内的根目录就变为只读而无法写入了. 经过调查都是因为docker/devicemapper/devi ...
- 【网搜】禁止 number 输入非数字(Android仍有问题)
目的:使用 number 表单,让其只可输入数字. 问题:ios 可正常限制,Android 仍可输入 [ e | . | - | + ] 这4个字符.猜测这4个字符在数值中为科学记数.小数 ...
- js加密(七)steam登录
1. url: https://store.steampowered.com/login/?redir=&redir_ssl=1 2. target: 登录 3. 分析 3.1 老样子,抓包, ...
- HyperLedger Fabric 资料网址大全
BLOCKCHAIN FOR DEVELOPERS 官方网址 i. 这个网址是ibm给的测试网址,注册进去就可以设置4个节点的区块链,而且有智能合约可以测试 区块链和HyperLedger开源技术讲堂 ...
- robotframe常用的类库、对应的方法和属性
robotframe常用的类库.对应的方法和属性
- AcWing - 156 矩阵(二维哈希)
题目链接:矩阵 题意:给定一个$m$行$n$列的$01$矩阵$($只包含数字$0$或$1$的矩阵$)$,再执行$q$次询问,每次询问给出一个$a$行$b$列的$01$矩阵,求该矩阵是否在原矩阵中出现过 ...
- 如何在CentOS 7上安装Apache
使用systemctl管理Apache服务 我们可以像任何其他系统单元一样管理Apache服务. 要停止Apache服务,请运行: sudo systemctl stop httpd 要再次启动,请键 ...
- 关于React Native init 项目时候速度太慢的解决方法
因为init项目的时候需要下载资源,但又因为react native的网站被墙所以下载很慢,解决方法就是换成淘宝的NPM镜像 我是直接使用了命令去替换了NPM $ npm install -g cnp ...
- mysql-8.0.18-winx64 环境变量的配置
1. 鼠标右击 此电脑 -->属性 如图:进行步骤 1->2->3 接下来就可以使用命令mysql -u root -p登录mysql了 启动mysql的命令为net ...
- sql语句查询指定月份数据
要求:查询出emp表中1981年2月份入职的员工 emp表 常用的两种方式: 1.YEAR查询年,MONTH查询月 SELECT * FROM emp WHERE ' 2.date_format (使 ...