直接看实例:
Users.java
package cn.iborder.entity;
import cn.iborder.logging.MyLog;
public class Users {
private Integer id;
private String username;
private String password;
private String name;
public Users(){
System.out.println(MyLog.showLog(this)+"无参构造函数,Users对象创建"+this);
}
public Users(Integer id,String username,String password,String name){
System.out.println(MyLog.showLog(this)+"有参构造函数,Users对象创建"+this);
this.id = id;
this.username = username;
this.password = password;
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Users [id=" + id + ", username=" + username + ", password=" + password + ", name=" + name + "]";
}
public void init() {
System.out.println(MyLog.showLog(this)+"对象创建时调用"+this);
}
public void destory() {
System.out.println(MyLog.showLog(this)+"对象销毁时调用"+this);
}
}
BeanFactory.java
package cn.iborder.factory;
import cn.iborder.entity.Users;
public class BeanFactory {
public Users getInstance() {
return new Users(3, "baidu", "baidupass", "baiduname");
}
public static Users getStaticInstance() {
return new Users(4, "sina", "sinapass", "sinaname");
}
}
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
<!-- ##############对象创建############### -->
<!-- bean节点
声明对象交给Spring框架来创建
id: 标识容器中的bean,id唯一。
class: bean的全类名,通过反射的方式在IOC容器中创建bean,所以要求bean中必须有无参数的构造器
scope 指定该对象的作用域,参数如下:
singleton 默认值,在应用启动时就已经创建了bean对象。表示在spring容器中的单例,通过spring容器获得该bean时总是返回唯一的实例
prototype 表示每次获得bean都会生成一个新的对象(多例模式),在调用bean对象时才会创建对象。
request 表示在一次http请求内有效(只适用于web应用)
session 表示在一个用户会话内有效(只适用于web应用)
lazy-init 设置单例模式下bean对象在调用时才创建。默认值为default(false)
init-method 在bean实例化后要调用的方法
destroy-method 指定bean对象销毁时调用的方法
-->
<!-- ######调用无参构造函数创建bean对象###### -->
<bean id="Users" class="cn.iborder.entity.Users" scope="singleton" lazy-init="default" init-method="init" destroy-method="destory">
<!-- property
在bean对象创建时通过setter方法给属性(成员变量)注入值
name 属性名
value 属性值
ref 引用其他bean对象
-->
<property name="id" value="1"></property>
<property name="username" value="baidu"></property>
<property name="password" value="alipay"></property>
<property name="name" value="sina"></property>
</bean>
<!-- ######调用有参构造函数创建bean对象###### -->
<bean id="Users1" class="cn.iborder.entity.Users">
<!-- constructor-arg节点
通过有参构造函数给属性(成员变量)注入值
通过构造函数注入属性值可以指定参数的位置和参数的类型,以区分重载的构造器
value 给有参构造函数设置参数值
index 指定参数的索引(位置)
type 指定参数的类型
-->
<constructor-arg value="2" index="0" type="java.lang.Integer"></constructor-arg>
<constructor-arg value="sina" index="1"></constructor-arg>
<constructor-arg value="taobao" index="2"></constructor-arg>
<constructor-arg value="tmall" index="3"></constructor-arg>
</bean>
<!-- ######工厂类创建bean对象,实例方法###### -->
<!-- 工厂类 -->
<bean id="factory" class="cn.iborder.factory.BeanFactory"></bean>
<bean id="Users2" factory-bean="factory" factory-method="getInstance"></bean>
<!-- ######工厂类创建bean对象,静态方法###### -->
<bean id="Users3" class="cn.iborder.factory.BeanFactory" factory-method="getStaticInstance"></bean>
</beans>
applicationContext.xml中给bean对象属性注入值(依赖注入)
1、通过构造函数注入
具体看上面applicationContext.xml配置文件
2、通过setter方法注入值
具体看上面applicationContext.xml配置文件
3、P名称空间注入值
示例
<bean id="Users" class="cn.iborder.entity.Users" p:id="1" p:username="baidu " p:password="10086" p:name="sina"></bean>
<bean id="UsersDao" class="cn.iborder.Dao.impl.UsersDao" ></bean>
<bean id="UsersService" class="cn.iborder.Service.impl.UsersService" p:usersDao-ref="UsersDao"></bean>
<bean id="LoginAction" class="cn.iborder.action.LoginAction" p:usersService-ref="UsersService" scope="prototype"></bean>
4、自动装配(不推荐使用)
5、注解