spring 中使用注解
1、要在applicationContext.xml中配置扫描哪个包下的注解
<!-- 指定扫描cn.itcast.bean报下的所有类中的注解. 注意:扫描包时.会扫描指定报下的所有子孙包 --> <context:component-scan base-package="cn.itcast.bean"></context:component-scan>
上面这个配置说明只扫描cn.itcast.bean包以及子包中的注解
2、注解说明(实体类上的注解)
package cn.itcast.bean; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.annotation.Resource; import javax.xml.ws.RespectBinding; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import org.springframework.stereotype.Controller; import org.springframework.stereotype.Repository; import org.springframework.stereotype.Service; //<bean name="user" class="cn.itcast.bean.User" /> //@Component("user") // @Service("user") // service层 // @Controller("user") // web层 @Repository("user")// dao层 //指定对象的作用范围 @Scope(scopeName="singleton") public class User { private String name; @Value("18") private Integer age; //@Autowired //自动装配 //问题:如果匹配多个类型一致的对象.将无法选择具体注入哪一个对象. //@Qualifier("car2")//使用@Qualifier注解告诉spring容器自动装配哪个名称的对象 @Resource(name="car")//手动注入,指定注入哪个名称的对象 private Car car; public Car getCar() { return car; } public void setCar(Car car) { this.car = car; } public String getName() { return name; } @Value("tom") public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @PostConstruct //在对象被创建后调用.init-method public void init(){ System.out.println("我是初始化方法!"); } @PreDestroy //在销毁之前调用.destory-method public void destory(){ System.out.println("我是销毁方法!"); } @Override public String toString() { return "User [name=" + name + ", age=" + age + ", car=" + car + "]"; } }
@Component:这个注解一般是放在实体类上的相当于applicationContext.xml中的配置 <bean name="user" class="cn.itcast.bean.User" />
@Service:一般注解在service层中
@Controller:一般注解在web层
@Repository:一般注解在dao层
@Scope(scopeName="singleton"):指定对象的作用范围,prototype(多例)和singleton(单例)
上面这些是注解在javaEE中类上的,名字是为了区分在哪个层,并没有具体的功能,每个层上都可以写相同的注解,但是不推荐这样做。
3、注解说明(属性或者方法上的注解)
public class User { private String name; @Value("18") private Integer age; //@Autowired //自动装配 //问题:如果匹配多个类型一致的对象.将无法选择具体注入哪一个对象. //@Qualifier("car2")//使用@Qualifier注解告诉spring容器自动装配哪个名称的对象 @Resource(name="car")//手动注入,指定注入哪个名称的对象 private Car car; public Car getCar() { return car; } public void setCar(Car car) { this.car = car; } public String getName() { return name; } @Value("tom") public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @PostConstruct //在对象被创建后调用.init-method public void init(){ System.out.println("我是初始化方法!"); } @PreDestroy //在销毁之前调用.destory-method public void destory(){ System.out.println("我是销毁方法!"); } @Override public String toString() { return "User [name=" + name + ", age=" + age + ", car=" + car + "]"; } }
@Value:注解在属性上(基础属性,不是指对象属性)目的是为了赋初值
@Resource(name="car"):对象属性注解,手动注入,指定注入哪个名称的对象
@Autowired:自动装配,问题:如果匹配多个类型一致的对象.将无法选择具体注入哪一个对象.
@Qualifier("car2"):使用@Qualifier注解告诉spring容器自动装配哪个名称的对象
@PostConstruct :在对象被创建后调用.init-method
@PreDestroy:在销毁之前调用.destory-method