Spring–对象的创建及赋值
基础篇:
对象的创建:
1.在配置文件里(Spring.xml)写配置信息:
例:
<!--
一个bean标签,代表让spring工厂给我们创建对象
id:是唯一标识,是未来通过工厂获取对象的依据
class:指定类的全限定名
-->
<bean id="user" class="com.baizhi.entity.User"></bean>
<!--此时对象还没建成,只是在这里写了信息而已-->
2.通过API方法获取容器:
(通过ClassPathXmlApplicationContext这个api类加载Spring.xml,将里面所有的对象放在ctx这个容器里,通过 ctx.getBean(“Spring.xml里对象id名”)获取对象)
例:testSpring.java
public class testSpring {
public static void main(String[] args){
//创建一个容器
ApplicationContext ctx = new ClassPathXmlApplicationContext("/Spring.xml");//此时对象已创建
User user = (User)ctx.getBean("user");//获取容器里的对象
System.out.println(user);
}
}
(目前来看只能通过get类属性获取信息。)
对象的赋值:
1.set注入方法。(本质:依赖于实体类中本身存在set方法)(注意:要手动给实体类创建无参构造)
1.1 八种基本数据类型 和 string
<bean id="user" class="com.baizhi.entity.User">
<!--给对象属性赋值 称为set注入 其本质是依赖于实体类中的set方法-->
<property name="id" value="001"></property>
<property name="name" value="张三"></property>
</bean>
说明:name对象实体类中的属性名字,value是具体的值。
1.2 数组或者list集合
<property name="list">
<list>
<value>老大</value>
<value>老二</value>
</list>
</property>
1.3 set 集合
<property name="sets">
<set>
<value>悟空</value>
<value>八戒</value>
</set>
</property>
1.4 map集合
<property name="map">
<map>
<entry key="a" value="北京"></entry>
<entry key="b" value="天津"></entry>
</map>
</property>
1.5properties集合
<property name="pp">
<props>
<prop key="driver">com.mysql.jdbc.Driver</prop>
<prop key="url">jdbc:mysql://localhost:3306:test</prop>
</props>
</property>
1.6 自定义对象类型属性【重要】
<bean id="user2" class="com.baizhi.entity.User">
<property name="id" value="002"></property>
<property name="name" value="李四"></property>
<property name="address" ref="add"></property>
</bean>
<bean id="add" class="com.baizhi.entity.Address">
<property name="id" value="101"></property>
<property name="address" value="北京"></property>
</bean>
2.构造注入[了解]:通过调用对应的有参构造方法,初始化属性的值。
2.1根据构造方法参数索引的方式。(有参构造里的参数按顺序从0开始排列)
<bean id="add2" class="com.baizhi.entity.Address">
<constructor-arg index="0" value="102"></constructor-arg>
<constructor-arg index="1" value="上海"></constructor-arg>
</bean>
2.2根据构造方法参数名字匹配。
升级篇:
复杂对象的创建:(以数据库连接为例)
1.Spring 如何实现复杂对象的创建过程
1.1 定义实现FactoryBean<?> 接口,通过在接口的泛型中指定复杂对象的类型。
package com.baizhi.factory;
import org.springframework.beans.factory.FactoryBean;
import java.sql.Connection;
import java.sql.DriverManager;
public class ConnectionFactoryBean implements FactoryBean<Connection> {
//书写获得数据库连接的过程
@Override
public Connection getObject() throws Exception {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","123456");
return conn;
}
//返回对象类型
@Override
public Class<?> getObjectType() {
return Connection.class;
}
//是否是单例
/*
return false : 代表多例
return true : 代表单例
注意:此方法返回值,要根据创建复杂对象的特点来定
一般重量级资源对象,或者线程安全的对象,创建成单例的。
线程不安全的,创建成多例
* */
@Override
public boolean isSingleton() {
return false;
}
}
1.2 spring 配置
<bean id="connectionFactoryBean" class="com.baizhi.factory.ConnectionFactoryBean"></bean>
1.3 测试
@Test
public void connectionFactoryBean(){
ApplicationContext ctx = new ClassPathXmlApplicationContext("/Spring.xml");
Connection conn = (Connection) ctx.getBean("connectionFactoryBean");
System.out.println(conn);
}
再升级:
1数据库配置信息提取
1.1创建一个xxx.properties配置 保存数据库信息
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
user=root
password=123456
1.2 spring配置
<!--读取jdbc.properties-->
<context:properties-placeholder location="calsspath:jdbc.properties"></context:properties-placeholder>
1.3取 jdbc.properties 文件中的内容