注解的方式确实比手动写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相关推荐

  1. spring 中 pojo 类为什么不需要注入

    在思考这个问题之前应该需要知道什么是 IOC 和 DI .在<Spring5 高级编程>中是这样介绍它们之间的关系的: IOC 的核心是 DI,旨在提供一种更简单的机制来设置组件依赖项(通 ...

  2. Spring中注解大全

    Spring中注解大全 @Controller 标识一个该类是Spring MVC controller 处理器,用来创建处理http请求的对象 @Controller public class Te ...

  3. 原生java读取properties与spring中@value、@ConfigurationProperties读取配置文件

    原生java读取properties与spring中@value.@ConfigurationProperties读取配置文件 1.properties类 Properties 继承于 Hashtab ...

  4. 轻松了解Spring中的控制反转和依赖注入

    点击上方 "程序员小乐"关注公众号, 星标或置顶一起成长 每天早上8点20分, 第一时间与你相约 每日英文 When you have something you really l ...

  5. spring中的控制反转和依赖注入之间的关系

    Spring中的控制反转:把new这一个过程交给了spring容器去处理. 控制反转就是将new对象这一个过程交给外部去做(即Spring)而不是自己去创建. 图中的1"控制正转" ...

  6. spring系列-注解驱动原理及源码-bean组件注册

    目录 一.环境初始化 1.环境准备 二.bean的手动注入 1.xml方式注入bean 2.使用@Configuration&@Bean方式注入bean 三.自动扫描注册组件及bean 1.使 ...

  7. Spring中注解大全和应用

    点击上方△蓝字关注我们 带你征服编程和泡妞两座大山 @Controller @RestController: @Service @Autowired @RequestMapping @RequestP ...

  8. spring系列-注解驱动原理及源码-bean生命周期

    目录 一.Bean的初始化和销毁 1.@Bean指定初始化和销毁方法 2.通过实现InitializingBean和Disposabean来初始化和销毁bean 3.使用JSR250定义的@PostC ...

  9. spring中注解的通俗解释

    我们在没有用注解写spring配置文件的时候,会在spring配置文件中定义Dao层的bean,这样我们在service层中,写setDao方法,就可以直接通过接口调用Dao层,用了注解写法后,在配置 ...

最新文章

  1. python 字符串 删除 空格 换行符
  2. springBoot探索(2)——构建手脚架
  3. 《jQuery与JavaScript入门经典》——第 1 章 动态Web编程简介 1.1理解Web服务器浏览器范式...
  4. Docker容器安装配置
  5. 用Intersects方式联接地理数据,如何进行地理数据分析
  6. Web服务器超时处理
  7. Hibernate教程– ULTIMATE指南(PDF下载)
  8. 一位中国婆婆的自述[转]
  9. VS2010生成的文件在别的机器上运行提示“丢失MSVCR100D.dll”
  10. 优衣库KAWS联名款遭哄抢 大打出手场面惨烈 是我不懂时尚了吗?
  11. 【干货】python多进程和多线程谁更快
  12. java实参传空_java形参、实参、值传递、引用传递
  13. stm32固件库下载地址
  14. 怎么让plsqldev恢复界面视图复位
  15. softmax 激活函数
  16. 泊松过程的概念及其例题分析
  17. 大连英语培训商务英语百家外语当今社会学习商务英语的重要性
  18. Wopus问答第一期
  19. Ant Design Vue 动态路由
  20. java毕业设计大众点评管理系统Mybatis+系统+数据库+调试部署

热门文章

  1. leetcode-189. Rotate Array
  2. 万万没想到,AI算法开发、OCR应用已经进入零门槛时代!
  3. UCLA博士带入门:室内场景下智能机器人的环境感知及定位
  4. 利用Group Conv在单个CNN中实现集成学习
  5. 在Vid4上突破28dB大关!视频超分新的里程碑:IconVSR
  6. 文末送书|增强现实:原理与实践
  7. 人脸检测江湖的那些事儿——从旷视说起
  8. TensorFlow语义分割套件开源了ECCV18旷视科技BiSeNet实时分割算法
  9. Java二十三种设计模式 之代理(proxy)
  10. 首次!阿里达摩院将Pure Transformer 应用于目标重识别ReID!