Spring中注解注入bean和配置文件注入bean
注解的方式确实比手动写xml文件注入要方便快捷很多,省去了很多不必要的时间去写xml文件
按以往要注入bean的时候,需要去配置一个xml,当然也可以直接扫描包体,用xml注入bean有以下方法:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop" 6 xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd 7 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 8 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 9 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 10 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 11 12 <!-- 这个就是springmvc里面的包扫描,只要是家了@Controller,@Service之类的,都会自动扫描并加入注册 --> 13 <context:component-scan base-package="com.lx.springmvcdemo" use-default-filters="false"></context:component-scan> 14 15 16 <!-- 这个就是spring里面的bean注册,scope是告诉spring是用什么模式,是单例还是工厂或者request或者session等 -->17 <bean id="person" class="com.lx.springmvcdemo.bean.Color" scope="prototype"> 18 <property name="yellow" value="yellow"></property> 19 <property name="red" value="red"></property> 20 </bean> 21 22 <bean ></bean> 23 24 <!-- 开启基于配置的的AOP --> 25 <aop:aspectj-autoproxy ></aop:aspectj-autoproxy> 26 </beans>
可以看到,如果是手动注入bean的话,需要配置很多东西,比如采用的模式,包的路径,id,默认属性值等等,但用注解,可以省略很多,而且更加灵活
首先我们先建立一个普通的类:
package com.lx.springmvcdemo.bean;public class Color {private String yellow;public Color(String yellow, String red) {super();this.yellow = yellow;this.red = red;}public Color() {super();// TODO Auto-generated constructor stub }@Overridepublic String toString() {return "Color [yellow=" + yellow + ", red=" + red + "]";}public String getYellow() {return yellow;}public void setYellow(String yellow) {this.yellow = yellow;}public String getRed() {return red;}public void setRed(String red) {this.red = red;}private String red; }
然后做一个配置类,我们起个名字叫MainConfig
package com.lx.springmvcdemo.config;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Conditional; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import;import com.lx.springmvcdemo.bean.*; import com.lx.springmvcdemo.condition.LinuxCondition; import com.lx.springmvcdemo.condition.WindowCondition;//类中组建统一设置,这个conditional里面的是一个数组,只有满足这个条件,这个类里面的bean才会生效 //@Conditional({WindowCondition.class}) @Configuration//快速导入组件的注解,import,可以使用单个,也可以使用数组,这样就会自动导入这个组件 //{Color.class,Red.class,MyImportSelecter.class,MyImportBeanDefinitionRegistart.class} @Import({Blue.class}) public class MainConfigII {/*Scope,设置组件作用域* * @see ConfigurableBeanFactory#SCOPE_PROTOTYPE* @see ConfigurableBeanFactory#SCOPE_SINGLETON* @see org.springframework.web.context.WebApplicationContext#SCOPE_REQUEST* @see org.springframework.web.context.WebApplicationContext#SCOPE_SESSION* prototype:多实例,ioc启动的时候,并不会去添加这个person对象,而是在每次调用的时候new一次* singleton:单实例,也是默认值,会一直使用同一个* request:同一次请求创建一个实例* session:同一个session创建一个实例* * * @lazy* 懒加载:* 只针对单实例bean,默认容器启动的时候创建bean* 而懒加载则是,容器启动的时候不创建对象,而是第一次使用时候* 创建对象并初始化* * *///@Scope("singleton")//这个确定是单例还是多实例 // @Lazy ///这个就是懒加载 // @Bean("person") // public Person person() { // System.out.println("启动,添加person类"); // return new Person("aj",33); // }/**** Conditional:按照条件注册bean* 这个conditional也可以注册到类上面* 意思也是一样,就是满足conditional这个注解里面的条件,这个类下面的所以bean才会生效* @return*//**** 给容器中注册组件的注解* 1),@Bean():就像下面所演示的一样* 2),@import():可以快速导入不需要操作很复杂的组件,可以直接用数组批量导入* 其中,ID是默认的全类名* ImportSelector:自定义返回bean,数组,* importBeanDefinitionRegistart:手动注册bean到容器里面* * 3),直接扫描某一个包下面的全部bean* 4),FactoryBean,这个是spring提供的工厂bean* 1),默认获取调用的是bean调用getObject()的对象* 2),要获取工厂本身的话,可以用&ColorFactoryBean来获取,即&加上bean的ID* @return*/@Bean public Color Color() {return new Color();} }
以上代码里面都有很详细的注释
然后可以直接建立一个测试类
@Test public void test02() {// ApplicationContext applicationContext=new ClassPathXmlApplicationContext("bean.xml");//通过AnnotationConfigApplicationContext获取配置文件//然后通过bean的ID 获取beanApplicationContext applicationContext=new AnnotationConfigApplicationContext(MainConfigII.class);Color c= (Color) applicationContext.getBean("Color");System.out.println(c.toString());// Person person2=(Person) applicationContext.getBean("person");//System.out.println(person==person2);}
以上。
转载于:https://www.cnblogs.com/hickup089/p/9910686.html
Spring中注解注入bean和配置文件注入bean相关推荐
- spring 中 pojo 类为什么不需要注入
在思考这个问题之前应该需要知道什么是 IOC 和 DI .在<Spring5 高级编程>中是这样介绍它们之间的关系的: IOC 的核心是 DI,旨在提供一种更简单的机制来设置组件依赖项(通 ...
- Spring中注解大全
Spring中注解大全 @Controller 标识一个该类是Spring MVC controller 处理器,用来创建处理http请求的对象 @Controller public class Te ...
- 原生java读取properties与spring中@value、@ConfigurationProperties读取配置文件
原生java读取properties与spring中@value.@ConfigurationProperties读取配置文件 1.properties类 Properties 继承于 Hashtab ...
- 轻松了解Spring中的控制反转和依赖注入
点击上方 "程序员小乐"关注公众号, 星标或置顶一起成长 每天早上8点20分, 第一时间与你相约 每日英文 When you have something you really l ...
- spring中的控制反转和依赖注入之间的关系
Spring中的控制反转:把new这一个过程交给了spring容器去处理. 控制反转就是将new对象这一个过程交给外部去做(即Spring)而不是自己去创建. 图中的1"控制正转" ...
- spring系列-注解驱动原理及源码-bean组件注册
目录 一.环境初始化 1.环境准备 二.bean的手动注入 1.xml方式注入bean 2.使用@Configuration&@Bean方式注入bean 三.自动扫描注册组件及bean 1.使 ...
- Spring中注解大全和应用
点击上方△蓝字关注我们 带你征服编程和泡妞两座大山 @Controller @RestController: @Service @Autowired @RequestMapping @RequestP ...
- spring系列-注解驱动原理及源码-bean生命周期
目录 一.Bean的初始化和销毁 1.@Bean指定初始化和销毁方法 2.通过实现InitializingBean和Disposabean来初始化和销毁bean 3.使用JSR250定义的@PostC ...
- spring中注解的通俗解释
我们在没有用注解写spring配置文件的时候,会在spring配置文件中定义Dao层的bean,这样我们在service层中,写setDao方法,就可以直接通过接口调用Dao层,用了注解写法后,在配置 ...
最新文章
- python 字符串 删除 空格 换行符
- springBoot探索(2)——构建手脚架
- 《jQuery与JavaScript入门经典》——第 1 章 动态Web编程简介 1.1理解Web服务器浏览器范式...
- Docker容器安装配置
- 用Intersects方式联接地理数据,如何进行地理数据分析
- Web服务器超时处理
- Hibernate教程– ULTIMATE指南(PDF下载)
- 一位中国婆婆的自述[转]
- VS2010生成的文件在别的机器上运行提示“丢失MSVCR100D.dll”
- 优衣库KAWS联名款遭哄抢 大打出手场面惨烈 是我不懂时尚了吗?
- 【干货】python多进程和多线程谁更快
- java实参传空_java形参、实参、值传递、引用传递
- stm32固件库下载地址
- 怎么让plsqldev恢复界面视图复位
- softmax 激活函数
- 泊松过程的概念及其例题分析
- 大连英语培训商务英语百家外语当今社会学习商务英语的重要性
- Wopus问答第一期
- Ant Design Vue 动态路由
- java毕业设计大众点评管理系统Mybatis+系统+数据库+调试部署
热门文章
- leetcode-189. Rotate Array
- 万万没想到,AI算法开发、OCR应用已经进入零门槛时代!
- UCLA博士带入门:室内场景下智能机器人的环境感知及定位
- 利用Group Conv在单个CNN中实现集成学习
- 在Vid4上突破28dB大关!视频超分新的里程碑:IconVSR
- 文末送书|增强现实:原理与实践
- 人脸检测江湖的那些事儿——从旷视说起
- TensorFlow语义分割套件开源了ECCV18旷视科技BiSeNet实时分割算法
- Java二十三种设计模式 之代理(proxy)
- 首次!阿里达摩院将Pure Transformer 应用于目标重识别ReID!