一 IOC-Bean对象创建的三种方式
- 无参构造创建
- 静态工厂创建
- 实例工厂创建
1 无参构造创建(默认是无参的) - .xml配置
<!--无参构造-->
<bean id="user" class="User"></bean>
- 对象定义
public class User {
public void add(){
System.out.println("add...................");
}
}
- 测试
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* Created by pc on 2017/9/7.
*/
public class TextIOC {
public static void main(String[] args) {
//加载Spring配置文件,并创建对象
ApplicationContext context = new ClassPathXmlApplicationContext("Spring/applicationContext.xml");
//得到配置的对象
User user= (User) context.getBean("user");
user.add();
System.out.println(user);
}
}
2 静态工厂创建
- .xml配置
<!--使用工厂创建对象-->
<bean id="bean2" class="Bean2Factory" factory-method="getBean2"></bean>
- 创建对象
public class Bean2 {
public void add(){
System.out.println("bean2............");
}
}
- 创建静态工厂类
public class Bean2Factory {
public static Bean2 getBean2(){
return new Bean2();
}
}
- 测试
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* Created by pc on 2017/9/7.
*/
public class TextIOC {
public static void main(String[] args) {
//加载Spring配置文件,并创建对象
ApplicationContext context = new ClassPathXmlApplicationContext("Spring/applicationContext.xml");
//得到配置的对象
Bean2 bean2= (Bean2) context.getBean("bean2");
System.out.println(bean2);
}
}
3 实例工厂创建
- .xml配置
<!--创建工厂对象-->
<bean id="bean3Factory" class="Bean3Factory"></bean>
<bean id="bean3" factory-bean="bean3Factory" factory-method="getBean3"></bean>
注释:因为不是静态对象,所以不能直接通过类名直接调用方法,所以要先通过类名。
- 对象创建
public class Bean3 {
public void add(){
System.out.println("bean3............");
}
}
- 实体工程类创建
public class Bean3Factory {
public Bean3 getBean3(){
return new Bean3();
}
}
- 测试
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* Created by pc on 2017/9/7.
*/
public class TextIOC {
public static void main(String[] args) {
//加载Spring配置文件,并创建对象
ApplicationContext context = new ClassPathXmlApplicationContext("Spring/applicationContext.xml");
//得到配置的对象
Bean3 bean3= (Bean3) context.getBean("bean3");
System.out.println(bean3);
bean3.add();
}
}
二 Bean标签常用属性
(1) id属性:起名称,id属性值名称任意命名
- id属性值,不能包含特殊符号
- 根据id值得到配置对象
(2)class属性:创建对象所在类的全路径
(3)name属性:功能和id属性一样的,id属性值不能包含特殊符号,但是在name属性值里面可以包含特殊符号。
(4)scpoe属性:
-
singleton:默认值,单例(只有一个对象)
1 .xml配置
2 测试
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* Created by pc on 2017/9/7.
*/
public class TextIOC {
public static void main(String[] args) {
//加载Spring配置文件,并创建对象
ApplicationContext context = new ClassPathXmlApplicationContext("Spring/applicationContext.xml");
//得到配置的对象
User user1= (User) context.getBean("user");
User user2= (User) context.getBean("user");
System.out.println(user1);
System.out.println(user2);
}
}
3 运行结果
- 注释:结果显示,单例测试调用同一个User对象的两个配置User对象输出地址相同
- prototype:多例
1.xml配置
2 测试
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* Created by pc on 2017/9/7.
*/
public class TextIOC {
public static void main(String[] args) {
//加载Spring配置文件,并创建对象
ApplicationContext context = new ClassPathXmlApplicationContext("Spring/applicationContext.xml");
//得到配置的对象
User user1= (User) context.getBean("user");
User user2= (User) context.getBean("user");
System.out.println(user1);
System.out.println(user2);
}
}
3 运行结果
注释:多例测试,调用同一个User对象的两个配置User对象输出地址不同
- request:创建对象把对象放到request域里
- session:创建对象把对象放到session域里
- globalSession(全局):创建对象把对象放到globalSession域里(登录一次,其他同类不用在登录)