Spring框架(第二天)
一、 注入
a) set
i. JDK
1.八种基本类型(+包装类)+String
<bean id="User" class="com.dsl.test2.User">
<property name="age">
<value>18</value>
</property>
<property name="name">
<value>dsl</value>
</property>
</bean>
2.数组
<list>
<value>1111</value>
<value>2222</value>
<value>3333</value>
</list>
3.List
<list>
<value>1111</value>
<value>2222</value>
<value>3333</value>
</list>
4.Set
<set>
<value>aaa</value>
<value>bbb</value>
<value>ccc</value>
</set>
5.Map
<map>
<entry>
<key><value>001</value></key>
<value>dsl</value>
</entry>
<entry>
<key><value>002</value></key>
<value>dsl2</value>
</entry>
</map>
6.Properties 集合HashTable的子类 类似于Map<String,String>
<property name="age" value="18"/>
<property name="name" value="dsl"/>
ii. 自定义类型(程序员自己定义+开源框架提供的类型) 成员变量注入
UserService{
UserDao ud;
}
//spring配置文件
<bean id="UserDao" class="xxx.UserDao"/>
<bean id="UserService class="xxx.UserService">
<property name="ud">
<ref local="UserDao"/>
</property>
</bean>
b) 构造
<constructor-arg>
<value>18</value>
</constructor>
<constructor-arg>
<value>dsl</value>
</construcyor>
根据标签的个数, 自动匹配对应的构造方法
注意:构造重载
构造方法参数不同
通过标签个数匹配构造方法
构造方法参数相同
通过为标签体检type属性 区分调用哪个类型的构造方法
<constructor-arg type="int">
<value>18</value>
</constructor-arg>
二、 目的为成员变量赋值,优势是:解耦和
三 、Spring创建对象和注入的原理
a) 创建对象
<bean id="User" class="xxx.User"/> User{int age;String name}
1.读取配置文件,加载类信息
2.通过反射创建对应类的对象,反射调用无参构造函数。
b) 注入
<bean id=”User” class=”xxxx.User”>
<property name=”age”>
<value>18</value>
</property>
<property name=”name”>
<value>dsl</value>
</property>
</bean>
User user =new User();
user.setAge(18);
user.setName(“dsl”)
四、FactoryBean技术
对象(简单对象 可以通过构造方法直接创建的对象)
对象(复杂对象 不能通过构造方法直接创建的对象,由若干步骤组成)
Connection :
Class.forName(“oracle.jdbc.OracleDriver”) //com.mysql.jdbc.Driver
Connection conn = DriverManager.getConnection();
SqlSession:
Resources.getResourceAsStream(“Myabtis-config.xml”)
New SqlSessionFactoryBuilder().build(is);
Ssf.openSession()
a) FactoryBean开发过程
i. 类 实现 FactoryBean接口: class ConnectionFactoryBean implements FactoryBean
ii. 覆盖接口中的所有方法 FactoryBean 方法有3
- //用于书写复杂对象的创建过程的代码,并将创建的复杂对象返回
public Object getObject(){
Class.forName(“oracle.jdbc.OracleDriver”) //com.mysql.jdbc.Driver
Connection conn = DriverManager.getConnection();
return conn;
}
2.//用于返回复杂对象的实际类型
public Class getObjectType(){
return Connnection.class
}
3.//用于控制复杂对象的创建次数
public Boolean isSingleton(){
return true;//工厂只会创建一次当前对象 SqlSessionFactory
return false;//每次创建一个新的对象 connection
}
iii.配置文件进行配置
<bean id=”conn” class=”xxx.ConnectionFactoryBean”/> Connection
获取复杂对象:
Connection conn = (Connection)ApplicationContext.getBean(“conn”);
注意:如果创建的是复杂对象(实现了FactoryBean接口),通过bena标签ID值获取的对象就是要创建的复杂对象
1、 isSingleton方法返回值怎么确定 看需求 根据对象的特点定
2、 获取ConnectionFactoryBean类的对象?
ConnectionFactoryBean cfb = (ConnectionFactoryBean)ApplicationContext.getBean(“&conn”);
Spring框架(第二天)的更多相关文章
- Spring框架第二天
## Spring框架第二天 ## ---------- **课程回顾:Spring框架第一天** 1. 概述 * IOC和AOP 2. 框架的IOC的入门 * 创建applicationContex ...
- Spring框架第二篇之Bean的装配
一.默认装配方式 代码通过getBean();方式从容器中获取指定的Bean实例,容器首先会调用Bean类的无参构造器,创建空值的实例对象. 举例: 首先我在applicationContext.xm ...
- Spring框架的第三天
## Spring框架的第三天 ## ---------- **课程回顾:Spring框架第二天** 1. IOC的注解方式 * @Value * @Resource(name="" ...
- Spring学习指南-第二章-Spring框架基础(完)
第二章 Spring框架基础 面向接口编程的设计方法 在上一章中,我们看到了一个依赖于其他类的POJO类包含了对其依赖项的具体类的引用.例如,FixedDepositController 类包含 ...
- [翻译]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 ...
- 初识Spring框架实现IOC和DI(依赖注入)
学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的, IoC是 ...
- spring框架学习(二)依赖注入
spring框架为我们提供了三种注入方式,分别是set注入,构造方法注入,接口注入.接口注入不作要求,下面介绍前两种方式. 1,set注入 采用属性的set方法进行初始化,就成为set注入. 1)给普 ...
- spring框架详解: IOC装配Bean
1 Spring框架Bean实例化的方式: 提供了三种方式实例化Bean. 构造方法实例化:(默认无参数) 静态工厂实例化: 实例工厂实例化: 无参数构造方法的实例化: <!-- 默认情况下使用 ...
- Spring框架学习一
Spring框架学习,转自http://blog.csdn.net/lishuangzhe7047/article/details/20740209 Spring框架学习(一) 1.什么是Spring ...
- [Spring框架]Spring IOC的原理及详解。
这里感谢 CSDN 的原博客:http://blog.csdn.net/m13666368773/article/details/7802126 看后 受益匪浅,这里再重温一遍Spring IOC ...
随机推荐
- kubernetes中headless类型的service
目录 初识headless类型的service 开始研究headless类型的service headless类型的service之我的理解 初识headless类型的service 第一次使用ran ...
- 51单片机—使用PWM对直流电机调速
文章目录 - 什么是PWM - PWM是怎么对直流电机进行调速的 - 通过定时器中断实现PWM调速 - 上代码 - 什么是PWM PWM(脉宽调制),是靠改变脉冲宽度来控制输出电压,通过改变周期来控制 ...
- 01-ADB命令获取包名、界面名
命令代码 adb shell dumpsys window |findstr mFocusedApp
- 从自旋锁、睡眠锁、读写锁到 Linux RCU 机制讲解
同步自我的 csdn 博客 6.S081 从自旋锁.睡眠锁.读写锁到 Linux RCU 机制讲解_我说我谁呢 --CSDN博客 总结一下 O/S 课程里面和锁相关的内容. 本文是 6.S0 ...
- exportfs命令 – 管理NFS服务器共享的文件系统
exportfs命令需要参考配置文件"/etc/exportfs".也可以直接在命令行中指定要共享的NFS文件系统. 语法格式: export [参数] [目录] 常用参数: -a ...
- C# 调用C++结构体
参考网址:C#调用C/C++动态库,封装各种复杂结构体._liguo9860的专栏-CSDN博客 现在公司要做一个使用C#程序调用C++的一个DLL库,解析文件的功能.所以在网上找了一些资料. ...
- .Net Core 集成 Redis
首先安装RedisServer 安装教程可参照 http://www.redis.cn/download.html 或者 https://www.runoob.com/redis/redis-inst ...
- java Math.random()生成从n到m的随机整数
Java中Math类的random()方法可以生成[0,1)之间的随机浮点数.而double类型数据强制转换成int类型,整数部分赋值给int类型变量,小数点之后的小数部分将会丢失. 如果要生成[0, ...
- rocketmq知识点
消息队列mq 参考资料:https://www.jianshu.com/p/824066d70da8 一.消息中间件的主要作用和功能: 1)异步解耦和分流: 2)挡住前端的数据洪峰,保证后端系统的稳定 ...
- IO流(File类--递归--过滤器--IO字节流--IO字符流--Properties集合--缓冲流--转换流--序列化流--打印流)
一.File类 1.1概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 1.1.1相对路径与绝对路径 相对路径从盘符开始的路径,这是一个完整 ...