Spring 注解@Component、@Repository、@Resource 学习实例

通过学习Spring 注解@Component、@Repository、@Resource,从中了解到了注解的方便实用性。

第一次学习这几个注解时还勉强能理解其用法和概念,但过了几天后便又忘了;所以学习编程是真的要多练习,多接触。通过回顾上一篇转载的讲解中,又再一次熟悉了Spring 注解@Component、@Repository、@Resource的概念。所以特意写了一个实例来加深印象:

1.通过一个Car类和User类来进行Spring 注解@Component、@Repository、@Resource的测试

Car类的创建:

//@Repository("usercar") //等效@Component
@Component("usercar")
public class Car {
    private String name;
    private String color;

    public String getName() {
        return name;
    }
    //通过set方法赋值
    @Value("保时捷")
    public void setName(String name) {
        this.name = name;
    }

    public String getColor() {
        return color;
    }
    @Value("宝石黑")
    public void setColor(String color) {
        this.color = color;
    }

    @Override
    public String toString() {
        return "Car{" +
                "name='" + name + '\'' +
                ", color='" + color + '\'' +
                '}';
    }
}

其中顶部的注解@Component和@Repository是等效的,亲测过是能通过编译运行出结果的;set方法中可以使用注解@Value进行赋值。

User类的创建:

@Repository("user")
public class User {
    private String name;
    private String age;
    private Car car;

    public String getName() {
        return name;
    }
    @Value("张三")
    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }
    @Value("24")
    public void setAge(String age) {
        this.age = age;
    }

    public Car getCar() {
        return car;
    }
    //手动注入,指定注入哪个名称的对象
    @Resource(name = "usercar")
    public void setCar(Car car) {
        this.car = car;
    }
    @PostConstruct //在构造方法和init方法(如果有的话)之间得到调用,且只会执行一次
    public void init(){
        System.out.println("我是初始化方法");
    }
    @PreDestroy //注解的方法在destroy()方法调用后得到执行。
    public void destroy(){
        System.out.println("我是销毁方法");
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age='" + age + '\'' +
                ", car=" + car +
                '}';
    }
}
@Resource(name = "usercar"):手动注入,指定注入要注入的名称对象,这里是指定注入Car类中定义注解@Component("usercar")的usercar名称对象
init()和destroy()这两个方法分别是初始化和销毁方法。
@PostConstruct: 在构造方法和init方法(如果有的话)之间得到调用,且只会执行一次
@PreDestroy: 注解的方法在destroy()方法调用后得到执行。

2.创建配置文件

配置文件可以先配置好再写测试类也可以,个人习惯就是习惯性的创建好类。

创建一个名为applicationContext.xml的配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context
                           http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 值定扫描soft.demo4包下的所有类中的注解。
		 注意:扫描包时,会扫描值定包下的所有子包
	 -->
    <context:component-scan base-package="soft.demo4"></context:component-scan>

</beans>
<context:component-scan base-package="soft.demo4"></context:component-scan>这行将是为注解起到关键性的一行,它将指定扫描你的xxx包下的所有类中的注解,其中base-package就是为需要扫描的包(含所有子包)

3.创建一个测试类来测试

//帮我们创建容器
@RunWith(SpringJUnit4ClassRunner.class)
//指定创建容器时使用哪个配置文件
@ContextConfiguration("classpath:soft/demo4/applicationContext.xml")
public class DemoTest {

    //将名为user的对象注入到u变量中
    @Resource(name = "user")
    private User u;

    @Test
    public void test(){
        System.out.println(u);
    }

}

最后的输出结果是:

Spring 注解@Component、@Repository、@Resource 学习实例