Spring注解

在配置文件中添加组件扫描器

在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注解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值