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);
}
}
最后的输出结果是: