当前位置: 首页>编程语言>正文

spring 过时的注解 spring是如何处理注解的

1、什么是注解驱动

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

spring 过时的注解 spring是如何处理注解的,spring 过时的注解 spring是如何处理注解的_spring 过时的注解,第1张

2、注解驱动的弊端

  • 为了达成注解驱动的目的,可能会将原先很简单的书写,变的更加复杂
  • XML中配置第三方开发的资源是很方便的,但使用注解驱动无法在第三方开发的资源中进行编辑,因此会增大开发工作量

spring 过时的注解 spring是如何处理注解的,spring 过时的注解 spring是如何处理注解的_spring 过时的注解_02,第2张

 

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. 项目结构
  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>
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

https://www.xamrdz.com/lan/5fd1963677.html

相关文章: