开发工具与关键技术:eclipse.exe
作者:农村扛粑子
撰写时间:2021年 1月20日
在 Spring 中,尽管使用 XML 配置文件可以实现 Bean 的装配工作,但如果应用中 Bean 的数量较多, 会导致 XML 配置文件过于臃肿,从而给维护和升级带来一定的困难 Java 从 JDK 5.0 以后,提供了 Annotation(注解)功能,Spring 也提供了对 Annotation 技术的全面 支持。
下面就是一些注解的说明与讲解。
1.@Component 可以使用此注解描述 Spring 中的 Bean,但它是一个泛化的概念,仅仅表示一个组件(Bean),并且 可以作用在任何层次。使用时只需将该注解标注在相应类上即可,默认情况下生成的id名称为类 名称的 首字母小与。
2.@Repository 用于将数据访问层(DAO层)的类标识为 Spring 中的 Bean,其功能与 @Component 相同。
3.@Service 通常作用在业务层(Service 层),用于将业务层的类标识为 Spring 中的 Bean,其功能与 @Component 相同。
4.@Controller 通常作用在控制层,用于将控制层的类标识为 Spring 中的 Bean,其功能与 @Component 相同。
5.@Autowired 用于对 Bean 的属性变量、属性的 Set 方法及构造函数进行标注,配合对应的注解处理器完成 Bean 的 自动配置工作。默认按照 Bean 的类型进行装配。
6.@Resource 其作用与 Autowired 一样。其区别在于 @Autowired 默认按照 Bean 类型装配,而 @Resource 默认按 照 Bean 实例名称进行装配。 @Resource 中有两个重要属性:name 和 type。 Spring 将 name 属性解析为 Bean 实例名称,type 属性解析为 Bean 实例类型。如果指定 name 属 性,则按实例名称进行装配;如果指定 type 属性,则按 Bean 类型进行装配。 如果都不指定,则先按 Bean 实例名称装配,如果不能匹配,则再按照 Bean 类型进行装配;如果都无 法匹配,则抛出 NoSuchBeanDefinitionException 异常。
7.@Qualifier 与 @Autowired 注解配合使用,会将默认的按 Bean 类型装配修改为按 Bean 的实例名称装配,Bean 的实例名称由 @Qualifier 注解的参数指定。
8.@value 给属性赋值。
了解好了我们就用一些来实践吧。创建好的项目里的src文件里面创建Package包(com.gd.pojo和com.gd.Demo)然后在pojo创建两个类用来演示如下
一个user类
package com.gd.pojo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;//相关的架包
//注解配置bean
@Component
public class User {
// 属性注入
@Value(“啦啦”)//名字为啦啦
private String name;
@Value(“20”)//岁数为20
private int age;
// 自动配置,默认根据类型配置,在所有bean中找类型是car.class
@Autowired
private car car;
public car getCar() {
return car;
}
public void setCar(car car) {
this.car = car;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}@Override
public String toString() {
return “User [name=” + name + “, age=” + age + “, car=” + car + “]”;
}
}
这是个car类如下
package com.gd.pojo;
import org.springframework.stereotype.Component;
//注解配置bean
@Component
public class car {
private String cname;
private String color;
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}@Override
public String toString() {
return “car [cname=” + cname + “, color=” + color + “]”;
}然后配置applicationContext.xml src目录下新建applicationContext.xml文件,先导入jar包,后创建applicationContext.xml,否则无 代码提示 applicationContext.xml是Spring的核心配置文件 。
<context:component-scan base-package=“com.gd.pojo,com.gd.demo”></context:component-scan>
然后回到com.gd.pojo.Demo下的dome的代码如下。
public class dome {
public static void main(String[] args) {
// 封装spring容器 context
// 内路径 ClassPathXmlApplicationContext用来加载spr ing.xml 环境变量路径
ApplicationContext context = new ClassPathXmlApplicationContext(“spring.Xml”);
System.out.println(“00000000000000”);
// 常用方法 方法2对应applicationContext.xml中的id
User u1 = context.getBean(User.class);
// 调用getBeanD 方法3对应applicationContext.xml中的name
User u2 = (User) context.getBean("user1");
System.out.println(u1);
System.out.println(u2);
System.out.println(u == u2);
}
}运行测试效果后如下图: