Spring常用注解(一)

1、什么是注解驱动

注解启动时使用注解的形式替代xml配置,将繁杂的spring配置文件从工程中彻底消除掉,简化书写

Spring常用注解(一)

2、注解驱动的弊端

  • 为了达成注解驱动的目的,可能会将原先很简单的书写,变的更加复杂

  • XML中配置第三方开发的资源是很方便的,但使用注解驱动无法在第三方开发的资源中进行编辑,因此会增大开发工作量

Spring常用注解(一) 

3、启动注解功能

  • 启动注解扫描,加载类中配置的注解项

    <context:component-scan base-package="packageName"/>

  • 说明:

    • 在进行包所扫描时,会对配置的包及其子包中所有文件进行扫描

    • 扫描过程是以文件夹递归迭代的形式进行的

    • 扫描过程仅读取合法的java文件

    • 扫描时仅读取spring可识别的注解

    • 扫描结束后会将可识别的有效注解转化为spring对应的资源加入IoC容器

  • 注意:

    • 无论是注解格式还是XML配置格式,最终都是将资源加载到IoC容器中,差别仅仅是数据读取方式不同

    • 从加载效率上来说注解优于XML配置文件

 

4、bean的定义

  • 名称:@Component @Controller @Service @Repository

  • 类型:类注解

  • 位置:类定义上方

  • 作用:设置该类为spring管理的bean

  • 范例:

    @Component
    public class ClassName{}

  • 说明:

    • @Controller、@Service 、@Repository是@Component的衍生注解,功能同@Component

  • 相关属性

    • value(默认):定义bean的访问id

示例: 

  1. 项目结构

    Spring常用注解(一)

  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
            https://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            https://www.springframework.org/schema/context/spring-context.xsd">
    
        <!--启动注解驱动,指定对应的扫描路径,也就是资源所在的包-->
        <context:component-scan base-package="com.itheima" />
    
       <!--原本这些是需要进行下面配置的,使用注解后就不需要进行配置了-->
       <!-- <bean id="userService" class="com.itheima.service.impl.UserServiceImpl" />
        <bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
        <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>-->
    </beans>
  3.  UserServiceImpl实现类中添加注解(另外两个配置方法与其相似,故略)
    package com.itheima.service.impl;
    
    import com.itheima.service.UserService;
    import org.springframework.stereotype.Component;
    
    @Component("userService")
    public class UserServiceImpl implements UserService {
        public void save() {
            System.out.println("user service running....");
        }
        public void init() {
            System.out.println("user service init....");
        }
        public void destroy() {
            System.out.println("user service destroy....");
        }
    }
    

5、bean的作用域

  • 名称:@Scope

  • 类型:类注解

  • 位置:类定义上方

  • 作用:设置该类作为bean对应的scope属性

  • 范例:

    @Scope
    public class ClassName{}

  • 相关属性

    • value(默认):定义bean的作用域,默认为singleton

 

6、bean的生命周期

  • 名称:@PostConstruct、@PreDestroy

  • 类型:方法注解

  • 位置:方法定义上方

  • 作用:设置该类作为bean对应的生命周期方法

  • 范例:

    @PostConstruct
    public void init() { System.out.println("init..."); }

 示例:UserServiceImpl中添加注解

package com.itheima.service.impl;

import com.itheima.service.UserService;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

@Component("userService")
@Scope("singleton")

public class UserServiceImpl implements UserService {
    public void save() {
        System.out.println("user service running....");
    }

    @PostConstruct
    public void init() {
        System.out.println("user service init....");
    }

    @PreDestroy
    public void destroy() {
        System.out.println("user service destroy....");
    }
}

7、加载第三方资源

  • 名称:@Bean

  • 类型:方法注解

  • 位置:方法定义上方

  • 作用:设置该方法的返回值作为spring管理的bean

  • 范例:

    @Bean("dataSource")
    public DruidDataSource createDataSource() {    return ……;    }

  • 说明:

    • 因为第三方bean无法在其源码上进行修改,使用@Bean解决第三方bean的引入问题

    • 该注解用于替代XML配置中的静态工厂与实例工厂创建bean,不区分方法是否为静态或非静态

    • @Bean所在的类必须被spring扫描加载,否则该注解无法生效

  • 相关属性

    • value(默认):定义bean的访问id

上一篇:springboot自动装配原理


下一篇:LeetCode 560 和为 K 的子数组