Spring学习(三)Spring Bean装配(常用注解)

注册与管理Bean
=======================================
·从 Spring3.0开始, Spring Java Config项目提供了很多特性包括使用ava而不是XML定义bean,比如
@ Configuration, @Bean, @Import, @Dependson
·@ Componenti是一个通用注解,可用于任何bean
·@ Repository,@ Service,@ Controller是更有针对性的注解
[email protected] Repository通常用于注解DAO类,即持久层
[email protected] Servicei通常用于注解 Service类,即服务层
[email protected] Controller通常用于 Controller类,即控制层(MVC)

元注解(Meta-annotations)

======================================
·许多 Spring提供的注解可以作为自己的代码,即“元数据注解元注解是一个简单的注解,可以应用到另ー个注解
·

类的自动检测及Bean的注册

=====================================
·Spring可以自动检测类并注册Bean到 Application Context中
如:@Service @Repository @Autovired

<context:annotation-config/>

·通过在基于XML的 Spring配置如下标签(请注意包含上下文命名空间)
·< context: annotation- config/>仅会查找在同一个application Context中的bean注解

<beans xmlns="...">
    <context:annotation-config/>
</beans>
<beans xmlns="...">
    <context:component-scan base-package="com.demo"/>
</beans>

·< context:: component-scan>包含< context: annotationconfig>,通常在使用前者后,不用再使用后者
· AutowiredannotationBeanPostprocessor和Commonannotation Bean Postprocessor也会被包含进来

使用过滤器进行自定义扫描

=================================
·默认情况下,类被自动发现并注册bean的条件是:使用@Component, @Repository, @Service, @Controller 注解或者使用 @Component的自定义注解
·可以通过过器修改上面的行为,如:下面例子的XML配置忽略所有的@ Repositoryi注解并用"Stub"代替

<beans>
    <context:component-scan base-package="com.demo">
        <context:include-filter type="regex"             expression=".*Stub.*Repository"/>
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
    </context:component-scan>
</beans>        

定义Bean

=================================
·扫描过程中组件被自动检测,那么Bean名称是由Beannamegenerator生成的(@ Component,@ Repository,@ Service,@ Controller都会有个name属性用于显式设置 Bean Name)

1 @Service("Mydemo")
2 public class Demo{}
3 //在不使用自定义BeanID时,会自动类第一个字母小写当ID demo
4 @Service
5 public class Demo{}

·可自定义bean命名策略,实现 Beannamegenerator接口并一定要包含一个无参数构造函器

<beans>
    <context:component-scan base-package="com.demo" name-generator="com.demo.MyDemo" />
</beans>

作用域(Scope)

==================================

·通常情况下自动查找的 Spring组件,其 scope是 E singletonSpring2.5提供了ー个标识 scope的注解@ Scope

1 @Scope("prototype")
2 @Repository
3 public class Demo{}

·也可以自定义 scope策陥,实现 Scopemetadata Resolverf接口并提供一个无参构造器

<beans>
    <context:component-scan base-package="com.demo" scope-resolver="com.demo.Mydemo" />
</beans>

代理方式

=====================================
可以使用 scoped-proxy属性指定代理,有三个值可选:no, interfaces, targetClass

<beans>
    <context:component-scan base-package="com.demo" scope-proxy="interfaces" />
</beans>

@Required

=====================================
·@ Required注解适用于bean属性的 setter方法

·这个注解仅仅表示,受影响的bean属性必须在配置时被填充通过在bean定义就通过自动装配一个明确的属性值

public class Demo{
     private Lizhi lizhi;

    @Required
    public void setLizhi(Lizhi lizhi){
        this.lizhi = lizhi;
    }
}

@ Autowired

======================

·可以将@ Autowiredi注解为“传统”的 setter方法

1 public class Demo{
2      private Lizhi lizhi;
3
4     @Required
5     public void setLizhi(Lizhi lizhi){
6         this.lizhi = lizhi;
7     }
8 }

·可用于构造器或成员变量

1 @Autovired
2 private Lizhi lizhi;
3 private LizhiDao lizhiDao;
4 @Autovired
5 public LizhiFan(LizhiDao lizhiDao){
6     this.lizhiDao = lizhiDao;
7 }

·默认情况下,如果因找不到合适的bean将会导致 autowiring失败抛出异常,可以通过下面的方式避兔

1 public class SimpleDemo{
2     private Demo demo;
3
4     @Autowired(required=false)
5     public void setDemo(Demo demo){
6         this.demo = demo;
7     }
8 }

·每个类只能有一个构道器被标记为 required=true

· @Autowired的必要属性,建议使用@Required注解

·可以使用@Autowiredi注解那些众所周知的解析依赖性接口,比如: Beanfactory, Applicationcontext, Environment,Resourceloader, Applicationeventpublisher, andMessagesource

原文地址:https://www.cnblogs.com/ic710/p/11027169.html

时间: 2024-08-04 10:05:48

Spring学习(三)Spring Bean装配(常用注解)的相关文章

spring学习(三) ———— spring事务操作

前面一篇博文讲解了什么是AOP.学会了写AOP的实现,但是并没有实际运用起来,这一篇博文就算是对AOP技术应用的进阶把,重点是事务的处理. --wh 一.jdbcTemplate 什么是JdbcTemplate? spring提供用于操作数据库模版,类似Dbutils,通俗点讲,我们操作数据库,spring也会帮我们提供一个操作数据库的工具供我们使用,而不用我们自己手动编写连接数据库,获取结果集等等操作,这个工具就是JdbcTemplate.跟Dbutils一样,想要使用JdbcTemplate

Spring学习系列(二) 自动化装配Bean

一.Spring装配-自动化装配 @Component和@ComponentScan 通过spring注解(@Component)来表明该类会作为组件类,并告知Spring要为这类创建bean,不过组件扫描默认是不启动的,需要显式的配置Spring,从而命令Spring去寻找带有(@Component)注解的类,并为其创建bean. 1.定义接口 package com.seven.springTest.service; public interface HelloWorldApi { publ

spring学习(02)之bean实例化的三种方式

bean实体例化的三种方式 在spring中有三中实例化bean的方式: 一.使用构造器实例化:(通常使用的一个方法,重点) 二.使用静态工厂方法实例化: 三.使用实例化工厂方法实例化 第一种.使用构造器实例化: 这种实例化的方式可能在我们平时的开发中用到的是最多的,因为在xml文件中配置简单并且也不需要额外的工厂类来实现. 比如 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="h

Spring学习(11)---JSR-250标准注解之 @Resource、@PostConstruct、@PreDestroy

1)@Resource(JSR-250标准注解,推荐使用它来代替Spring专有的@Autowired注解) Spring 不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource.@PostConstruct以及@PreDestroy. @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了.@Resource有两个属性是比较重要的,分别

spring学习 三 框架的搭建

1 导入jar包 spring启来最少要5个包,四个核心包和一个依赖的日志包 2 创建配置文件 在dynamic web project下的src目录下,创建一个spring的xml配置文件,名称可以任意,但是一般建议命名为applicationContext.xml.  applicationContext.xml配置文件是基于she ma约束的. shema约束与DTD约束一样,都是xml语法检查器. 在老版本的spring中,采用的spring容器接口是BeanFactory,  在新的版

Spring学习2—Spring容器

一.Spring容器接口关系 容器是Spring框架的核心,Spring容器就是一个巨大的工厂.Spring容器使用Ioc(控制反转(Inversion of Control )管理所有组成应用系统的组件. Spring容器会使用XML解析器读取改属性值,并利用反射来创建该实现类的实例. Spring有两个核心接口:BeanFactory和ApplicationContext,其中ApplicationContext是BeanFactory的子接口.它们都可以代表Spring容器.Spring容

spring学习 六 spring与mybatis整合

在mybatis学习中有两种配置文件 :全局配置文件,映射配置文件.mybatis和spring整合,其实就是把mybatis中的全局配置文件的配置内容都变成一个spring容器的一个bean,让spring容器进行托管.因此整合过程就是把mybatis全局配置文件的内容整合到spring的配置文件中 (一)mybatis全局配置文件 : 根标签是<configuration>, 子标签包括: <typeAliases>配置别名, <environments> 配置数据

Spring学习【Spring概述】

从本文开始,我们就要一起学习Spring框架,首先不得不说Spring框架是一个优秀的开源框架.其中采用IoC原理实现的基于Java Beans的配置管理和AOP的思想都是很值得学习与使用的.下面我们就进入正题!介绍Java平台上的一个优秀的开源应用框架Spring,以及Spring框架的历史和Spring框架相关基本知识. [转载使用,请注明出处:http://blog.csdn.net/mahoking] Spring 介绍 Spring是Java平台上的一个开源应用框架.它的第一个版本是由

Spring 学习6 -Spring MVC-2 (Spring MVC讲解)

在本例中,我们将使用Spring MVC框架构建一个入门级web应用程序.Spring MVC 是Spring框架最重要的的模块之一.它以强大的Spring IoC容器为基础,并充分利用容器的特性来简化它的配置. 目录 MVC框架是什么Dispatcher Servlet(Spring控制器)Spring入门示例运行时依赖库web.xml和spring-servlet.xml文件配置请求控制器EmployeeController.java视图模型EmployeeVO.javaDao类业务层类视图