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