1.使用注解配置spring
1>需要为主配置文件引入新的命名空间约束并导入aop包


2>开启使用注解代理配置文件
<!-- 指定扫描com.bean包及其子包下的所有类中的注解-->
<context:component-scan base-package="com.bean"></context:component-scan>
3>在类中使用注解完成配置
package com.bean;
import org.springframework.stereotype.Component;
//<bean name="user" class="com.bean.User"/>
@Component("user")
public class User {
private String name;
private int age;
private Car car;
public Car getCar() {
return car;
}
public void setCar(Car car) {
this.car = car;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User [name=" + name + ", age=" + age + ", car=" + car + "]";
}
}
获得对象并测试输出为:User [name=null, age=0, car=null]
还有其他三种注解(推荐使用):
@Service("user")//service层
@Controller("user")//web层
@Repository("user")//dao层
@Scope(scopeName="prototype|singleton")//指定对象的作用范围
@Repository("user")//dao层
@Scope(scopeName="prototype")
public class User {
private String name;
private int age;
private Car car;
public Car getCar() {
return car;
}
public void setCar(Car car) {
this.car = car;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User [name=" + name + ", age=" + age + ", car=" + car + "]";
}
}
@Value("tom")//值类型注入,两种方法
@Value("tom")
private String name;
@Value("tom")
public void setName(String name) {
this.name = name;
}
前一种通过反射的Field赋值,后一种通过反射的set方法赋值,结果都一样,但是实现过程不一样,但是前一种破坏了对象的封装性。
@Autowired//引用类型注入,自动装配
首先将引用对象放入容器
package com.bean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component("car")
public class Car {
@Value("玛莎拉蒂")
private String name;
@Value("呕吐绿")
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;
}
@Override
public String toString() {
return "Car [name=" + name + ", color=" + color + "]";
}
}
然后在User中添加注解
@Autowired
private Car car;
实际上是自动扫描容器中存储的对象,如果有符合的就在这里复制,但是如果匹配到多个类型一致的对象,将无法选择具体注入哪一个对象。这时候可以加一个辅助注解@Qualifier("name"),告诉spring对象应该装配哪个对象
除此之外,还可使用@Resource("name"),这个是完全手动注入,自己指定注入对象的名称。一般推荐@Resource("name")。
同过注解指定初始化和销毁方法:@PostConstruct//在对象创建后执行
@PreDestroy//在对象销毁之前调用