02_Spring注解开发

1. 概述

​ Spring是轻代码而重配置的框架,配置比较繁重,影响开发效率,因此出现了注解开发,注解开发是一种趋势,可以代替xml配置文件,简化配置,提高开发效率

​ 根据注解的出现快慢,国际上将注解开发分为新注解与原始注解:

2. 原始注解

Spring原始注解主要是用来替代<Bean>的配置,主要注解如下:

2.1 类注解:实例化bean:

注解名说明
@Component使用在类上用于实例化Bean
在类上增加@Component相当于<bean>与class的配置
再在@Component的值里添加(“id”)就等同于<bean>+id+class
@Controller使用在web层类上用于实例化Bean
是语义化的类注解
效果其实与@Component 是一样的,写给人看的
@Service使用在service层类上用于实例化Bean
同上
@Repository使用在dao层类上用于实例化Bean
同上

示例:

// <bean id="UserDao" class="com.com.ahua.dao.UserDaoImpl" scope="prototype"/>
@Repository("userDao")
public class UserDaoImpl implements UserDao{

    public UserDaoImpl() {
        System.out.println("创建成功");
    }

    @Override
    public void select() {
        System.out.println("查询成功");
    }

}

2.2 bean的属性配置注解:

依赖注入:

注解说明
@Autowired使用在字段上用于根据类型依赖注入,以下三个也都是使用在字段上
表示自动注入,即如果只在字段上加这一个注解,而没加其他注解
那会根据数据类型在spring容器中进行自动匹配
相当于用getBean(类类型),因此含多个同类型的bean时会报错
@Qualifier必须结合@Autowired一起使用,用于根据名称进行依赖注入
是用于替代ref属性的,在注解中填入要注入对象的bean id
相当于用getBean(“id”)进行匹配获取对象
@Resource相当于@Autowired+@Qualifier,按照名称进行注入
使用这个注解不加参数相当于@Autowired
目前唯一一个通过变量name指定id(只有name,没有value)
相当于@Autowired+@Qualifier
注意:这个注解需要导包:javax.annotation-api
@Value注入普通数据类型,替代value属性
上面的都是注入引用数据类型
主要与JSTL表达式结合(直接在Value的value变量里写JSTL表达式)

通过@Autowired+@Qualifier或者@Resource注解就不需要set方法或者有参构造方法注入了

@Autowired+@Qualifier代码示例:

// <bean id="UserService" class="com.com.ahua.service.impl.UserServiceImpl">
@Service("userService")
public class UserServiceImpl implements UserService {
    // <property name="userDao" ref="UserDao"/>
    @Autowired
    @Qualifier("userDao")
    private UserDao userDao;

    @Override
    public void select() {
        userDao.select();
    }
}

@Resource注解导包:

<dependency>
      <groupId>javax.annotation</groupId>
      <artifactId>javax.annotation-api</artifactId>
      <version>1.3.2</version>
</dependency>

@Resource示例:

// <bean id="UserService" class="com.com.ahua.service.impl.UserServiceImpl">
@Service("userService")
public class UserServiceImpl implements UserService {
    // <property name="userDao" ref="UserDao"/>
    // @Autowired
    // @Qualifier("userDao")
    @Resource(name = "userDao")
    private UserDao userDao;

    @Override
    public void select() {
        userDao.select();
    }
}

作用范围配置:

注解说明
@Scope**使用在类上**标注Bean的作用范围

示例:

// <bean id="UserDao" class="com.com.ahua.dao.UserDaoImpl" scope="prototype"/>
@Repository("userDao")
@Scope("prototype")
public class UserDaoImpl implements UserDao{

    public UserDaoImpl() {
        System.out.println("创建成功");
    }

    @Override
    public void select() {
        System.out.println("查询成功");
    }

}

2.3 初始化/销毁方法配置:

注解说明
@PostConstruct使用在方法上标注该方法是Bean的初始化方法
@PreDestroy使用在方法上标注该方法是Bean的销毁方法

2.4 配置组件扫描:

注意:

​ 对于spring的注解开发,必须告诉spring容器创建对象时去注解那里找对象创建, 即在applicationContext.xml中配置组件扫描

​ 作用是指定哪个包及其子包下的Bean需要进行扫描以便识别使用注解配置的类、字段和方法

配置组件扫描:

<!--注解的组件扫描,需要先使用context命名空间-->
<!-- 表示在com.ahua这个包下需要扫描使用注解配置的类 -->
<!-- base-package表示基本包 -->
<context:component-scan base-package="com.ahua"/>

context命名空间:在根标签的属性中增加命名空间与约束路径:

<!-- 命名空间: -->
xmlns:context="http://www.springframework.org/schema/context"
<!-- 约束路径: -->
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
<!-- 同时在自带的xsi:schemaLocation约束路径中有beans的约束路径 -->
<!-- 因此我们只需要将自带的copy,将自带的所有的beans修改为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">

同时配置context命名空间与约束路径后,我们可以使用spring容器加载properties配置文件:

<context:property-placeholder location="xx.properties"/>
<property name="" value="${key}"/>

3. 新注解

使用上面的注解还不能全部替代xml配置文件,还需要使用注解替代的配置如下:

  • 非自定义的Bean的配置(即别人提供的类):<bean>
  • 加载properties文件的配置:<context:property-placeholder>
  • 组件扫描的配置:<context:component-scan>
  • 引入其他文件:<import>

因此引入以下新注解:

注解说明
@Configuration写在类上,用于指定当前类是一个 Spring 配置类,当创建容器时会从该类上加载注解
@ComponentScan写在类上,用于指定 Spring 在初始化容器时要扫描的包
作用和在 Spring 的 xml 配置文件中的
<context:component-scan base-package=“com.itheima”/>一样
@Bean使用在方法上,标注将该方法的返回值存储到 Spring 容器中
默认情况下,@Bean的Id与带有@Bean的方法名一样
同时给该注解变量赋值相当于给返回值变量起名字
@PropertySource写在类上,用于加载.properties 文件中的配置
@Import写在核心配置类上,用于导入其他配置类
其中value={},即value是数组,可以加载多个配置类

注意:

​ 使用配置类之后需要将加载核心配置文件改为加载核心配置类,来创建spring容器,此时就不需要xml配置文件了,可以进行完全注解开发,示例:

ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfiguration.class);

(使用spring进行创建druid数据池的代码还需完善)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值