IoC容器装配Bean_基于注解配置方式

合集下载

bean的几种装配方式的基本用法

bean的几种装配方式的基本用法

bean的几种装配方式的基本用法Bean的几种装配方式的基本用法在Spring框架中,Bean是一个重要的概念,它代表了应用程序中的一个组件。

Bean可以通过不同的装配方式来实现依赖注入,从而实现组件之间的解耦。

本文将介绍几种常见的Bean装配方式及其基本用法。

一、XML配置文件装配1.1 基本概念XML配置文件是Spring框架最早支持的一种Bean装配方式。

通过在XML配置文件中定义Bean的属性和依赖关系,Spring容器可以自动创建和管理这些Bean。

1.2 基本语法在XML配置文件中,使用<bean>标签来定义一个Bean。

其中包含以下属性:- id:指定该Bean在容器中的唯一标识符;- class:指定该Bean对应的Java类;- scope:指定该Bean在容器中的作用域;- property:指定该Bean所依赖的其他Bean。

例如:<bean id="userService" class="erService"><property name="userRepository" ref="userRepository"/> </bean>上述代码定义了一个名为“userService”的Bean,它对应Java类“erService”,并依赖于名为“userRepository”的另一个Bean。

1.3 优缺点分析XML配置文件装配方式具有以下优点:- 配置灵活:可以通过修改XML配置文件来改变应用程序的行为;- 易于理解:XML配置文件的结构清晰,易于理解和维护。

但是,XML配置文件装配方式也存在以下缺点:- 冗长:XML配置文件需要编写大量的重复代码,增加了开发者的工作量;- 容易出错:由于XML配置文件中的内容是静态的,容易出现因修改不及时而导致的错误。

spring在IoC容器中装配Bean详解

spring在IoC容器中装配Bean详解

1<beanname="#car,123,$car"class="xxxxxxxxx">1 2<constructor-argindex="0"value="xxxxxx"><constructor-argindex="1"value="xxxxxx">spring在IoC容器中装配Bean详解1、Spring配置概述1.1、概述Spring容器从xml配置、java注解、spring注解中读取bean配置信息,形成bean定义注册表;根据bean定义注册表实例化bean;将bean实例放⼊bean缓存池;应⽤程序使⽤bean。

1.2、基于xml的配置(1)xml⽂件概述xmlns------默认命名空间xmlns:xsi-------标准命名空间,⽤于指定⾃定义命名空间的schema⽂件xmlns:xxx=“aaaaa”-------⾃定义命名空间,xxx是别名,后⾯的值aaaa是全名xsi:schemaLocation----------为每个命名空间指定具体的schema⽂件,格式:命名空间全名⽂件地址。

⽤空格隔开2、Bean基本配置2.1、Bean的命名(1)id和name都可以指定多个名字,名字之间⽤逗号,分号或空格进⾏分隔⽤户可以使⽤getBean("#car"),getBean("123"),getBean("$car")获取bean。

(2)如果没有指定id和name属性,则spring⾃动将类的全限定名作为bean的名称(3)如果存在多个匿名bean,即没有指定id和name的<bean/>,假设类的全限定名为xxx,则获取第⼀个bean使⽤getBean("xxx"),获取第⼆个bean使⽤getBean("xxx#1"),获取第三个bean使⽤getBean("xxx#2")。

IOC之基于Java类的配置Bean

IOC之基于Java类的配置Bean

IOC之基于Java类的配置Bean基于Java配置选项,可以编写大多数的spring不用配置XML,但有几个基于Java 的注释的帮助下解释。

从Spring3.0开始支持使用java代码来代替XML来配置Spring,基于Java配置Spring依靠Spring的JavaConfig项目提供的很多优点。

通过使用@Configuration,@Bean ,@Importand,@DependsOnannotations来实现Java的配置Spring.本文工程下载@Configuration & @Bean 注解:在Spring的新的Java-Configuration的中间产物是基于类的@Configuration的注解和基于方法的@Bean注解。

@Bean注解是用来指明方法的实例化,配置和初始化一个对象是通过Spring的IoC 容器来管理的。

对于那些熟悉使用以XML配置Spring的<beans /> 标签,@Bean注解和<bean />标签是起相同作用的。

你能和Spring的@Component注解的组件一起使用@Bean注解方法,然而,这些@Bean注解的方法通常是和@Configuration的Bean。

@Configuration注解的类指明该类主要是作为一个bean的来源定义。

此外,@Configurationd定义的classes允许在同一个类中使用@Bean定义的方法来定义依赖的bean 注释类与@Configuration表示这个类可以使用Spring IoC容器为bean定义的来源。

在@Bean 注解告诉Spring的注解为@Bean的一个方法将返回应注册为在Spring应用程序上下文中的bean对象。

最简单可行的@Configuration类将如下所示:[java] view plain copy 在CODE上查看代码片派生到我的代码片@Configurationpublic class CompanyConfig {@Beanpublic Employee employee(){return new Employee();}}上面的代码将等同于下面的XML配置:[html] view plain copy 在CODE上查看代码片派生到我的代码片<bean id="companyConfig" class="panyConfig"/>下面注解为@Bean的方法名称作为工作bean的id,它创建并返回实际的bean。

Spring IOC-容器装配Bean的简单使用

Spring IOC-容器装配Bean的简单使用

一、Spring简介Spring是一个开源框架,Spring是于2003年兴起的一个轻量级的Java开发框架,由Rod Johnson在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。

它是为了解决企业应用开发的复杂性而创建的。

框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件。

Spring提供了约20多个组件,开发者可以根据自己需要选择组件。

Spring的核心是控制反转(IoC)和面向切面编程(AOP)∙IoC:控制反转。

控制反转(Inversion of Control),又叫依赖注入(Dependency Injec tion)。

举例来说,在之前的操作中,比方说有一个类,我们想要调用类里面的方法(不是静态方法),就要创建类的对象,使用对象调用方法实现。

对于Spring来说,Spring创建对象的过程,不是在代码里面实现的,而是交给Spring来进行配置实现的。

∙AOP:面向切面编程。

面向切面编程(Aspect Orient Programming)支持允许将一些通用的任务入安全、事物、日志、缓存等进行集中式处理,从而提供了更好的复用,AOP通常用来处理一些具有横切性质的系统级服务。

二、Hello Spring实例从最简单的Hello,Spring例子来体会一下使用Spring框架。

首先看看不使用Spring框架的代码:HelloSpring.java类:=name;Test.java类:public static void main(String[]args){ HelloSpring hs=new HelloSpring();hs.sayHello();输出结果:下面我们用Spring框架来实现这个例子。

添加从Spring框架核心JAR文件:∙commons-logging-1.1.1∙spring-aop-5.0.6.RELEASE∙spring-aspects-5.0.6.RELEASE∙spring-beans-5.0.6.RELEASE∙spring-context-5.0.6.RELEASE∙spring-context-support-5.0.6.RELEASE∙spring-core-5.0.6.RELEASE∙spring-expression-5.0.6.RELEASE∙spring-instrument-5.0.6.RELEASE∙spring-instrument-tomcat-5.0.6.RELEASE∙spring-jdbc-5.0.6.RELEASE∙spring-jms-5.0.6.RELEASE∙spring-messaging-5.0.6.RELEASE∙spring-orm-5.0.6.RELEASE∙spring-oxm-5.0.6.RELEASE∙spring-test-5.0.6.RELEASE∙spring-tx-5.0.6.RELEASE∙spring-web-5.0.6.RELEASE∙spring-webmvc-5.0.6.RELEASE∙spring-webmvc-portlet-5.0.6.RELEASE∙spring-websocket-5.0.6.RELEASE这里只是使用Spring的基本功能,所以需要使用到下面的这几个Jar包:这里我使用的idea,用gradle编译的(用maven过程类似)。

spring4——IOC之基于注解的依赖注入(DI)

spring4——IOC之基于注解的依赖注入(DI)

spring4——IOC之基于注解的依赖注⼊(DI)spring容器对于Bean的创建和对象属性的依赖注⼊提供了注解的⽀持,让我们在开发中能够更加便捷的实现对象的创建和对象属性的依赖注⼊。

⼀,对于Bean的创建spring容器提供了以下四个注解的⽀持:1、@Component2、@Repository dao层实现类的注解3、@Service service层实现类的注解4、@Controller controller层实现类的注解以上四个注解在普通使⽤中是等效的,但在web项⽬中为了区分三层架构中不同层之间Bean的创建,为了避免注解使⽤的混乱,使⽤后三个注解进⾏区分。

⼆,对于Bean属性的依赖注⼊分为两类,⼀类是对于属性是String类型或者基本数据类型Spring容器提供了@Value这个注解,另⼀类是对于属性是对象的提供了@Autowired和@Resource这两个注解。

其中,@Autowired这个注解是spring框架⾃带的注解,⽽@Resource(javax.annotation.Resource)这个注解是javax扩展包中注解规范的⼀种,⽽spring对这⼀注解提供了⽀持。

下⾯我们通过实验来说明注解对于bean创建和bean属性依赖注⼊的实现。

⾸先要在配置⽂件中配置注解扫描的驱动。

<context:annotation-config/><context:component-scan base-package="com.opensource"/>这⾥提⼀句,如果配置了注解扫描包的范围,也就是第⼆⾏,那么<context:annotation-config/>可以不⽤配置,因为配置扫描包的范围后,注解的驱动也就有了。

实验⼀,bean的创建,因为spring容器对于bean创建的四个注解是等效,这⾥我们使⽤@Component这个注解Student类:@Componentpublic class Student {public Student(){System.out.println("spring容器调⽤Student类的⽆参构造器");}测试类:public class MyTest {public static void main(String[] args) {ApplicationContext ac = new ClassPathXmlApplicationContext("spring-bean.xml");}}实验结果:实验⼆:bean属性为String类型及基本数据类型的的依赖注⼊student类:@Component(value = "student")public class Student {@Value("张三")private String name;@Value("23")private int age;public String getName() {return name;}public int getAge() {return age;}}在这⾥ @Component(value = "student") value指定的是bean的id,另外对于注解⽅式实现的依赖注⼊,bean的属性⽆需再提供setter⽅法。

spring通过注解装配Bean

spring通过注解装配Bean

spring通过注解装配Bean 使⽤注解的⽅式可以减少XML的配置,注解功能更为强⼤,它既能实现XML的功能,也提供了⾃动装配的功能,采⽤了⾃动装配后,程序员所需要做的决断就少了,更加有利于对程序的开发,这就是“约定优于配置”的开发原则。

在Spring中,它提供了两种⽅式来让Spring IoC容器发现Bean。

•组件扫描:通过定义资源的⽅式,让Spring IoC容器扫描对应的包,从⽽把Bean装配进来。

•⾃动装配:通过注解定义,使得⼀些依赖关系可以通过注解完成。

通过扫描和⾃动装配,⼤部分的⼯程都可以⽤Java配置完成,⽽不是XML,这样可以有效减少配置和引⼊⼤量XML,它解决了在Spring 3之前的版本需要⼤量的XML配置的问题,这些问题曾被许多开发者诟病。

由于⽬前注解已经成为Spring开发的主流,在之后的章节⾥,笔者也会以注解的⽅式为主介绍Spring的开发,但是请注意只是为主,⽽不是全部以注解的⽅式去实现。

因为不使⽤XML也存在着⼀定的弊端,⽐如系统存在多个公共的配置⽂件(⽐如多个properties和XML⽂件),如果写在注解⾥,那么那些公共资源的配置就会⽐较分散了,这样不利于统⼀的管理,⼜或者⼀些类来⾃于第三⽅,⽽不是我们系统开发的配置⽂件,这时利⽤XML的⽅式来完成会更加明确⼀些,因此⽬前企业所流⾏的⽅式是,以注解为主,以XML 为辅,本书的介绍也是如此。

@Component(value = "role")public class Role {@Value("1")private Long id;@Value("role_name_1")private String roleName;@Value("role_note_1")private String note;} •注解@Component代表Spring IoC会把这个类扫描⽣成Bean实例,⽽其中的value属性代表这个类在Spring中的id,这就相当于XML⽅式定义的Bean的id,也可以简写成@Component("role"),甚⾄直接写成@Component,对于不写的,Spring IoC容器就默认类名,但是以⾸字母⼩写的形式作为id,为其⽣成对象,配置到容器中。

(完整版)SpringIOC

(完整版)SpringIOC

Spring IOC基于XML方式配置bean1。

配置javaBean1.1基本配置:一个<bean〉通常需要定义id和class属性,class属性肯定是必须的,如果配置文件中配置的其他的bean中引用了该bean,则id属性是必须的。

Bean则通过id属性相互访问,例如:<bean id=”exampleBean” class=”examples.ExampleBean”〉</bean>上述代码等同于Java代码:ExampleBean exampleBean = new ExampleBean();其中,对象名exampleBean相当于配置中的id属性.<bean id="…” class="…"〉〈property name="…" vaue=”…"/><!-定义Property属性——〉<property name=”…”ref="…”/></bean〉〈peoperty/>表示将使用name属性对应的setter方法设置该属性1.2工厂模式factory—method如果一个bean不能通过new直接实例化,而是通过工厂类的某个方法创建的,需要把<bean〉的class属性配置为工厂类(或者把factory—bean属性配置为工厂类对象),Factory—method属性配置为生产实例的方法:〈!—等同于exampleBean=examples。

MyFactoryBean。

createInstance();——〉<bean id=”exampleBean” class=”examples.MyFactoryBean"factory-method=”createInstance”/>1。

3构造函数<constructor=arg〉如果javabean的构造函数带有参数,需要指定构造函数的参数.<constructor—arg/>指定构造函数的参数所用的bean或者值。

基于@Bean修饰的方法参数的注入方式

基于@Bean修饰的方法参数的注入方式

基于@Bean修饰的⽅法参数的注⼊⽅式⽬录@Bean修饰的⽅法参数的注⼊Bean的四种注⼊⽅式1、set注⼊2、构造器注⼊3、静态⼯⼚注⼊4、实例⼯⼚注⼊@Bean修饰的⽅法参数的注⼊⽅法参数默认注⼊⽅式为Autowired,即先根据类型匹配,若有多个在根据名称进⾏匹配。

1:复杂类型可以通过@Qualifier(value=“XXX”)限定2:对于普通类型使⽤@Value(XXX)指定@PropertySource("classpath:db.properties")public class SpringConfiguration {@Beanpublic static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {return new PropertySourcesPlaceholderConfigurer();}/*** ⽅法参数默认注⼊⽅式为Autowired: <br>* 1:复杂类型可以通过@Qualifier(value="dataSource")限定; <br>* 2:对于普通类型使⽤@Value指定; <br>*/@Bean(name = "dataSource")public DataSource dataSource(@Value("${jdbc.driverClass}") String driverClassName,@Value("${jdbc.jdbcUrl}") String url, @Value("${er}") String username,@Value("${jdbc.password}") String password) {DriverManagerDataSource dataSource = new DriverManagerDataSource();dataSource.setDriverClassName(driverClassName);dataSource.setUrl(url);dataSource.setUsername(username);dataSource.setPassword(password);return dataSource;}@Bean(name = "jdbcTemplate")public JdbcTemplate jdbcTemplate(@Qualifier(value = "dataSource") DataSource dataSource) {return new JdbcTemplate(dataSource);}}Bean的四种注⼊⽅式我使⽤下⾯两个类来进⾏注⼊的演⽰,这两个类分别是User和Car类:Car类:public class Car {// 只包含基本数据类型的属性private int speed;private double price;public Car() {}public Car(int speed, double price) {this.speed = speed;this.price = price;}public int getSpeed() {return speed;}public void setSpeed(int speed) {this.speed = speed;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}@Overridepublic String toString() {return "Car{" +"speed=" + speed +", price=" + price +'}';}}User类:public class User {private String name;private int age;// 除了上⾯两个基本数据类型的属性,User还依赖Carprivate Car car;public User() {}public User(String name, int age, Car car) { = name;this.age = age;this.car = car;}public String getName() {return name;}public void setName(String name) { = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Car getCar() {return car;}public void setCar(Car car) {this.car = car;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", age=" + age +", car=" + car +'}';}}1、set注⼊有了上⾯两个类,就可以演⽰set注⼊了。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

—高级软件人才实作培训专家! 使用注解义Bean除了@Component外,Spring提供了3个 功能基本和@Component等效的注解
• @Repository 用于对DAO实现类进行标注 • @Service 用于对Service实现类进行标注 • @Controller 用于对Controller实现类进行标注
当bean被载入到容器的时候调 用setup 注解方式下: •@PostConstruct •初始化
当bean从容器中删除的时候调用 teardown(scope= singleton有效) 注解方式如下: @PreDestroy 销毁
北京传智播客教育 北京传智播客教育
Bean名称 Bean注入
<property> 或者 @Autowired 按类型注入 通过p命名空间 @Qualifier按名称注入 init-method destroy-method 范围 scope属性 @PostConstruct 初始化 @PreDestroy 销毁 @Scope设置作用范围


Spring提供AnnotationConfigApplicationContext 用于加载使用 @Configuration 配置注解工厂类 register方法 用于向 注解上下文对象 添加一个配置类 refresh 刷新容器以应用这些注册的配置类
北京传智播客教育
北京传智播客教育
—高级软件人才实作培训专家! 自动装配Bean

通过@Autowired的required属性,设置一定要找到匹配的Bean 使用@Qualifier指定注入Bean的名称 使用Qualifier 指定Bean名称后,注解Bean必须指定相同名称

北京传智播客教育

这三个注解是为了让标注类本身的用途清 晰,Spring在后续版本会对其增强
北京传智播客教育
—高级软件人才实作培训专家! 自动装配Bean



使用@Autowired 进行自动注入 @Service 标注业务类 @Repository 标注DAO @Autowired 默认按照类型进行注入 • 如果存在两个相同Bean类型相同,则按照名称注入 @Autowired注入时可以针对成员变量或者setter方法
—高级软件人才实作培训专家! 传统XML配置和注解配置混合使用

1、引入context命名空间
<beans xmlns="/schema/beans" xmlns:xsi="/2001/XMLSchema-instance" xmlns:context="/schema/context" xsi:schemaLocation="/schema/beans /schema/beans/spring-beans.xsd /schema/context /schema/context/spring-context.xsd">

Spring3.0以JavaConfig为核心,提供使用Java类定 义Bean信息的方法
• •
@Configuration 指定POJO类为Spring提供Bean定义信息 @Bean 提供一个Bean定义信息
北京传智播客教育
—高级软件人才实作培训专家!
采用手动方式加载@Configuration配置类
—高级软件人才实作培训专家! Bean的作用范围


使用注解配置的Bean和<bean>配置的一样,默 认作用范围都是singleton @Scope注解用于指定Bean的作用范围
北京传智播客教育
—高级软件人才实作培训专家!
Spring3.0提供使用Java类提供Bean定义信息
—高级软件人才实作培训专家!
Ioc容器装配Bean(注解方式)
于 洋
北京传智播客教育
—高级软件人才实作培训专家! 使用注解定义Bean

Spring2.5 引入使用注解去定义Bean

@Component 描述Spring框架中Bean
北京传智播客教育
生命过程、 Bean作用范围
适合场景
Bean来自第三 Bean的实现类由用户自己 开发 方,使用其它 命名空间 北京传智播客教育
实例化Bean的逻 辑比较复杂
Spring初始化bean或销毁bean时,有时需要作一些处理工作,因 此spring可以在创建和拆卸bean的时候调用bean的两个生命周 期方法。 <bean id=“foo” class=“...Foo” init-method=“setup” destory-method=“teardown”/>

2、在配置文件中添加context:annotation-config标签
<context:annotation-config/>
使@Resource、@ PostConstruct、@ PreDestroy、@Autowired注解生效
北京传智播客教育
—高级软件人才实作培训专家! 多种装配Bean方式比较
—高级软件人才实作培训专家!
自动装配Bean (使用标准注解@Resource)


Spring提供对JSR-250中 定义@Resource标准注解 的支持 @Resource和 @Autowired注解功能相似
北京传智播客教育
—高级软件人才实作培训专家!
指定Bean的初始化方法和销毁方法(注解)
基于XML配置 Bean定义 <bean id="..." class="..." /> 通过 id或name 指定 基于注解配置 @Component 衍生类@Repository @Service @Controller @Component("person") 基于Java类配置 @Configuration标 注类,@Bean标 注提供Bean方法 @Bean("person") 在方法内部编写 注入代码逻辑 在方法内部调用 初始化方法 @Scope指定范围
相关文档
最新文档