bean标签
一、属性
name
- 给被管理的对象起个名字,获得对象时根据该名称获得对象
- 可以重复,可以使用特殊字符
class
- 被管理对象的完整类名
id
- 与name属性功能一样
- 名称不可重复,不能使用特殊字符
- 尽量使用name属性
scope
属性值 | 生命周期 |
---|---|
singleton | 单例的,容器启动时创建,容器关闭时销毁(Factory必须是singleton的) |
prototype | 多例原型,每一次获取都会创建新的对象(Action必须是prototype的) |
request | web应用中和request生命周期一致 |
session | web应用中和session生命周期一致 |
singleton
开启容器,对象创建,每次获取的对象相同
prototype
获取对象,对象创建,每次获取的对象不同
prototype不能用ac.close()方法销毁,垃圾回收销毁
//singleton:开启Spring容器时,对象创建
ApplicationContext ac = new ClassPathXmlApplicationContext("day01/applicationConte xt.xml");
//prototype:从Spring容器中获取对象时,对象创建
User user1 = (User) ac.getBean("user");
User user2 = (User) ac.getBean("user");
System.out.println(user1 == user2);
//singleton返回true
//prototype返回false
init-method
- 初始化时调用的方法
destroy-method
- 销毁时调用的方法
二、配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd">
<bean name="user" class="day01.User" scope="singleton" init-method="init" destroy-method="destroy"></bean>
</beans>
测试
public class TestUser {
@Test
public void test01() {
//1、开启Spring容器
ApplicationContext ac = new ClassPathXmlApplicationContext("day01/applicationContext.xml");
//2、从Spring容器中获得对象-User
User user1 = (User) ac.getBean("user");
User user2 = (User) ac.getBean("user");
System.out.println(user1 == user2);
//关闭容器 -> 实现类才有
//ac.close();
}
三、注解
注解 | 替代 |
---|---|
@Component | 取代bean这个标签,有三个子注解,用法相同,为了区分各层,一般用子注解 |
@Scope | scope |
@PostConstruct | inut-method |
@PreDestroy | destroy-method |
@Value | 依赖注入,写在属性/set方法上,两者都有时,用的是set方法上的 |
@Autowired | 自动装配,自动去容器中寻找引用的其他类型的对象,一个类中注入另外一个类,注解和配置文件中都有时,用的是注解的属性值 |
@Qualifier | 获取指定名称的对象,和@Autowired一起使用 |
@Resource | @Resource(name=“xxx”),取代@Autowired和@Qualifier两个注解 |
@Component的三个子注解
注解 | 层 |
---|---|
@Repository(仓库) | dao层 |
@Service | service层 |
@Controller | web层 |
测试
package day01;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestZhujie {
@Test
public void test01() {
ApplicationContext ac = new ClassPathXmlApplicationContext("day01/applicationContext.xml");
// User user = ac.getBean(User.class);
User user = (User) ac.getBean("user");
// User user = (User) ac.getBean("User");
System.out.println(user);
}
}
实体类
//User
package day01;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component//name默认类名小写 user
//@Component("User")
//@Scope(scopeName="prototype")
public class User {
@Value("zhangsan")
private String username;
private int age;
// @Autowired
// @Qualifier("car1")
@Resource(name="car1")
private Car car;
public User(String username, int age, Car car) {
super();
this.username = username;
this.age = age;
this.car = car;
}
public User() {
System.out.println("对象创建了");
}
public void init() {
System.out.println("初始化");
}
public void destroy() {
System.out.println("销毁");
}
public User() {
}
public String getUsername() {
return username;
}
// @Value("lisi")
public void setUsername(String username) {
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Car getCar() {
return car;
}
public void setCar(Car car) {
this.car = car;
}
@Override
public String toString() {
return "User [username=" + username + ", age=" + age + ", car=" + car + "]";
}
}
//Car
package day01;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class Car {
@Value("凯迪拉克")
private String name;
private String color;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public Car() {
super();
}
@Override
public String toString() {
return "car [name=" + name + ", color=" + color + "]";
}
}