Spring——注解编程

Spring——注解编程

第一章 注解的基本概念

1.1 什么是注解编程

指的是在类或者方法上加上特定的注解(@XXX),完成特定功能的开发。如:

@Component
public class OrderService{
   
    ...
}

1.2 为什么要讲解注解编程

  1. 注解开发非常方便:代码简洁,开发速度大大提高。
  2. Spring开发的潮流:Spring 2.x引入注解,Spring 3.x完善注解,SpringBoot 普及推广注解编程。

1.3 注解的作用

  • 替换xml这种配置形式,简化配置。
  • 替换接口,实现调用双方的契约型。
    • 通过注解的方式在功能的调用者和功能的提供者之间达成约定,进而进行功能的调用。因为注解的应用更为方便灵活,所以在现在的开发中,更为推荐使用注解的方式完成开发。

1.4 Spring注解的发展历程

  • Spring2.x 开始支持注解编程:@Component、@Service、@Scope等;
    • 目的:提供这些注解只是为了在某些情况下简化xml的配置,作为xml开发的有益增补。
  • Spring3.x 提供了更多的注解:@Configuration @Bean等;
    • 目的:彻底替换xml配置,基于纯注解编程。
  • Spring4.x 开始衍生出了SpringBoot。
    • 提倡使用注解完成常用开发。

1.5 Spring注解开发的一个问题

  • Spring基于注解进行配置后,还能否解耦合?
    • 在Spring框架应用注解时,如果对注解配置的内容不满意,可以通过Spring配置文件进行覆盖。

第二章 Spring的基础注解

这个阶段的注解,仅仅是简化xml的配置,并不能完全替代xml。

2.1 对象创建的相关注解

  • 搭建开发环境

    <context:component-scan base-package="com.itheima.ssm">
        <!-- 不扫描Controller注解 -->
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
    
    作用:让Spring框架在设置包及其自爆中扫描对应的注解,使其生效。
    
  • 对象创建相关注解

    • @Component:

      作用:用于替换原有spring配置文件中的<bean>标签,进而创建对象。
      注意:
      	id属性 component注解 提供了默认的设置方式 首单词首字母小写
      	class属性 通过反射获得class内容
      
    • @Component细节:

      • 如何显式指定工厂创建对象的id值:

        @Component("user")
        
      • Spring配置文件覆盖注解配置内容:

        在applicationContext.xml文件中,配置标签,指定id与@Component注解指定的id一致:
        <bean class="com.itheima.ssm.domain.User" id="user"/>
        
    • @Component的衍生注解:

      @Repository:表示持久层的@Component
      @Service:表示业务层的@Component
      @Controller:表示表现层的@Component
      
      注意:本质上这些衍生注解就是@Component,它的作用、细节、用法都是完全一致的。
      目的:更加准确的表法一个类型的作用。
      
    • @Scope:

      作用:用于控制简单对象的创建次数。
      注意:如果不提供@Scope注解,默认就是singleton
      
    • @Lazy:

      作用:用于延迟创建单实例对象。(在getBean的时候创建对象)
      注意:一旦使用了@Lazy注解后,Spring会在使用这个对象的时候,进行这个对象的创建。
      
    • 生命周期方法相关注解:

      1. 初始化相关方法 @PostConstruct
      	在方法上添加@PostConstruct,指定该方法为初始化方法
      
      2. 销毁方法 @PreDestroy
      	在方法上添加@PreDestroy,指定该方法为销毁方法
      
      注意:
      	1.上述的2个注解并不是Spring提供的,是由JSR(JavaEE规范)520提供的;
      	2.再一次的验证,通过注解实现接口的契约型。
      

2.2 注入相关注解

  • 用户自定义类型的注入:

    @Autowired
    
    细节:
    1. Autowired注解是基于类型来进行注入:
    	- 注入对象的类型,必须与目标成员变量类型相同或是其子类(实现类)
    2. Autowired注解配合Qualifier注解 可以 基于名字进行注入:
    	- 基于名字的注入,注入对象的id值,必须与Qualifier注解中设置的名字相同
    3. Autowired注解放置的位置
    	a) 放置在对应成员变量的set方法上
    	b) 直接把注解放置在对应成员变量上,Spring会通过反射直接对成员变量进行赋值(注入)【推荐】
    4. JavaEE规范中类似功能的注解:
    	JSR250 @Resource(name = "xxx")
    		这个注解相当于Autowired注解+Qualifier注解
    		注意:如果在应用Resource注解时,名字没有配对成功,那么他会继续按照类型进行注入
    
  • JDK类型变量的注入:

    @Value注解完成
    1. 设置xxx.properties
     id = 10
     name = suns
    2. Spring工厂读取这个配置文件
     <context:property-placeholder location="init.properties" file-encoding="gbk"/>
    3. 代码
     属性上加上注解:@Value("${key}")
    
    • @PropertiesSource

      作用:用于替换Spring配置文件中的<context:property-placeholder/>标签
      开发步骤:
      	1. 设置xxx.properties
      		id = 10
      		name = suns
          2. 应用@Properties注解:
          	@PropertySource(value = "init.properties",encoding = "gbk")
          3. 代码
      		属性上加上注解:@Value("${key}")
      
    • @Value注解使用细节

      • @Value不能使用在静态成员变量上。

        如果应用,赋值(注入)将失败
        
      • @Value注解+Properties的这种方式,不能注入集合类型。

        Spring提供了新的配置形式:YAML YML(SpringBoot)
        

2.3 注解扫描详解

<context:component-scan base-package="com.itheima.ssm"/>
这个注解扫描,针对当前包及其子包

这种方法扫描包,比较宽泛,会将所有的包中的所有类都扫描进去。所想要扫描的类有针对性,有两种方法:

  • 排除方式

    <context:component-scan base-package="com.itheima.ssm">
        <context:exclude-filter type="" expression=""/>
        <!--
            其中type属性有五种:
            assignable:排除特定的类型 不进行扫描
            annotation:排除特定的注解 不进行扫描
            aspectj:通过包(类)切入点表达式 排除特定包(类)【推荐使用】
            regex:正则表达式
            custom:自定义排除策略,应用在框架的底层开发
        -->
    </context:component-scan>
    
    注意:排除策略可以叠加使用,即多个<context:exclude-filter/>同时生效
    
  • 包含方式

    <context:component-scan base-package="com.itheima.ssm" use-default-filters="false">
        <context:include-filter type="aspectj" expression="com.itheima.ssm..*"/>
    </context:component-scan>
    
    1. use-default-filters="false":
    	作用:让Spring默认的注解扫描策略(全部扫描) 失效
    2. <context:include-filter/>
    	作用:指定扫描哪些注解,type属性和排除方式中的一致。
    3. 包含方式也支持叠加
    

2.4 对于注解开发的思考

  • 配置互通

    Spring注解配置的类 与 配置文件的配置的类 是互通的
    
  • 什么情况下使用注解?什么情况下使用配置文件?

    @Component注解 替换 <bean
    
    基础注解(@Component、@Autowired、@Value)只能用于程序员开发类型的配置
    
    1. 在程序员开发的类型上,可以加入对应注解,进行对象的创建;
    	如:User、UserServiceImpl等
    2. 应用其他非程序员开发的类型时,还是需要使用<bean 进行配置的
    	如:SqlSessionFactoryBean、MapperScannerConfigure等
    

2.5 SSM整合开发(半注解开发)

  • 搭建开发环境

    • 引入相关jar坐标【SSM POM】
    • 引入相关配置文件
      • applicationContext.xml
      • springmvc-config.xml
      • log4j.properties
      • XxxMapper.xml
    • 初始化配置
      • web.xml文件中,引入ContextLoaderListener创建Spring工厂
      • web.xml文件中,引入SpringMVC的前端控制器DispatcherServlet
  • 编码

    <context:component-scan base-package=""
    
    • DAO(Spring+MyBatis)

      1. 配置文件的配置
      	- DataSource
      	- SqlSessionFactoryBean
      		1.datasource
      		2.typeAliasesPackage
      		3.mapperLocations
      	- MapperScannerConfigure
      	
      2.编码
      	1.entity
      	2.table
      	3.DAO接口
      	4.实现mapper文件
      
    • Service

      1. 原始对象 --> 注入Dao
      2. 额外功能 --> DataSourceTransactionManager --> datasource
      3. 切入点 + 事务属性
           @Transactional(propagation,readonly,...)
      4. 组装切面
      	<tx:annotation-driven transaction-manager="transactionManager"/>
      
    • Controller(Spring + SpringMVC)

    1. 配置文件的配置
    	- <context:component-scan 扫描Controller类所在的包
    	- InternalResourceViewResolver
    	- <mvc:default-servlet-handler/>
    	- <mvc:annotation-driven/>
    2. 在Controller类中注入Service
    

第三章 Spring的高级注解(Spring 3.x及以上)

3.1 配置Bean

Spring在3.X提供的新的注解,用于替换XML配置文件

@Configuration
public class AppConfig {
}
  1. 配置bean在应用的过程中 替换了XML具体什么内容?

    配置bean替换了applicationContext.xml配置文件
    
  2. AnnotationConfigApplicationContext

    1. 创建工厂代码
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext();
    
    2. 指定配置文件
        2.1 指定配置bean的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值