Spring框架(第二天)
Posted dslnn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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”);