在配置文件中添加组件扫描器
在Spring配置文件beans.xml中加入组件扫描器,代码如下:
<context:component-scan base-package="cqucc.pojo" />
base-package属性对应值为需要扫描的包名。
类上添加注解
在类上添加注解,可以让组件扫描器发现添加注解的类,Spring容器即可创建对应类的对象。类上添加的注解如下:
- @Componet:基本注解,标识了一个受Spring管理的组件。
- @Respository:标识持久层的组件。
- @Service:标识服务层(业务层)的组件。
- @Controller:标识表现层的组件。
以上四个注解使用方式大同小异,目的是在不同的层使用对应的注解,增加代码的可读性。
使用注解获取对象
新建一个User类和Car类,在User类和Car类上添加@Componet注解,并在beans.xml文件中配置组件扫描器。
- beans.xml文件
<context:component-scan base-package="cqucc.pojo" />
- User类
@Component(value = "u")
public class User {
private String name;
private int age;
private Car car;
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", car=" + car +
'}';
}
}
- Car类
@Component
public class Car {
private String name;
private String color;
private double price;
@Override
public String toString() {
return "Car{" +
"name='" + name + '\'' +
", color='" + color + '\'' +
", price=" + price +
'}';
}
}
Spring管理的bean默认名字是类名首字母小写,所以在编写测试类获取对象时,getBean方法的参数可以填写默认值user。也可也通过使用注解后加value属性重新取名。这里我们使用value属性将User类的注解名字设置为u。测试类代码如下:
@Test
public void test01() {
ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
User u = (User) ac.getBean("u");
System.out.println(u.toString());
}
现在User对象已经获取成功,下一步是使用注解代替属性注入赋值。
使用注解注入
注入时使用的注解如下:
- @Value:注入基本数据类型、封装类以及String。
- @Autowired:注入引用数据类型。
- @Resource:注入引用数据类型,可以按照名字和类型进行注入。
下面对类Car和类User进行属性注入。
- Car类:
@Component
public class Car {
@Value("五菱")
private String name;
@Value("粉")
private String color;
@Value("13.2")
private double price;
@Override
public String toString() {
return "Car{" +
"name='" + name + '\'' +
", color='" + color + '\'' +
", price=" + price +
'}';
}
}
- User类
@Component(value = "u")
public class User {
@Value("奥利给")
private String name;
@Value("12")
private int age;
@Autowired
private Car car;
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", car=" + car +
'}';
}
}
测试类代码与运行结果如图:
设置忽略某些注解和只包含某些注解
对于基础包下的注解,可以设置忽略某些注解。编辑beans.xml文件,添加如下代码:
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Component" />
如设置只包含某些注解,需添加如下代码:
<context:include-filter type="annotation" expression="org.springframework.stereotype.Component" />
其中属性解释如下:
- type=“annotation”:按照注解进行排除,标注了指定注解的组件不要扫描。
- expression:注解的全类名。
下面忽略注解@Componet并查看运行结果。beans.xml文件如下:
<context:component-scan base-package="cqucc.pojo" >
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Component" />
</context:component-scan>
运行测试方法和结果如图:
报错结果为找不到名字为u的bean,代表成功忽略了User上的@Componet注解。