Spring中注解注入bean和配置文件注入bean
注解的方式确实比手动写xml文件注入要方便快捷很多,省去了很多不必要的时间去写xml文件
按以往要注入bean的时候,需要去配置一个xml,当然也可以直接扫描包体,用xml注入bean有以下方法:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <!-- 这个就是springmvc里面的包扫描,只要是家了@Controller,@Service之类的,都会自动扫描并加入注册 -->
<context:component-scan base-package="com.lx.springmvcdemo" use-default-filters="false"></context:component-scan> <!-- 这个就是spring里面的bean注册,scope是告诉spring是用什么模式,是单例还是工厂或者request或者session等 -->
<bean id="person" class="com.lx.springmvcdemo.bean.Color" scope="prototype">
<property name="yellow" value="yellow"></property>
<property name="red" value="red"></property>
</bean> <bean ></bean> <!-- 开启基于配置的的AOP -->
<aop:aspectj-autoproxy ></aop:aspectj-autoproxy>
</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
}
@Override
public 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 获取bean
ApplicationContext 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);
}
以上。
Spring中注解注入bean和配置文件注入bean的更多相关文章
- 轻松了解Spring中的控制反转和依赖注入(二)
紧接上一篇文章<轻松了解Spring中的控制反转和依赖注入>讲解了SpringIOC和DI的基本概念,这篇文章我们模拟一下SpringIOC的工作机制,使我们更加深刻的理解其中的工作. 类 ...
- Spring中的控制反转和依赖注入
Spring中的控制反转和依赖注入 原文链接:https://www.cnblogs.com/xxzhuang/p/5948902.html 我们回顾一下计算机的发展史,从最初第一台计算机的占地面积达 ...
- Spring中三个重要概念 IOC AOP Bean
Spring中三个重要概念 IOC AOP Bean 首先讲解一下Spring框架,以及为什么要使用Spring 框架? spring 是一个很好的容器框架, 是轻量级的IoC和AOP的容器框架,主要 ...
- 使用反射创建Bean、Spring中是如何根据类名配置创建Bean实例、Java提供了Class类获取类别的字段和方法,包括构造方法
Java提供了Class类,可以通过编程方式获取类别的字段和方法,包括构造方法 获取Class类实例的方法: 类名.class 实例名.getClass() Class.forNam ...
- spring中注解式事务不生效的问题
常用的解决方法可以百度,我针对我的问题描述一下 Mysql中InnoDB引擎才支持事务, MyISAM不支持事务. 当你尝试了各种方法解决spring中注解式事务不生效时, 一定要查看一下数据库中表的 ...
- spring中注解注入 context:component-scan 的使用说明
通常情况下我们在创建spring项目的时候在xml配置文件中都会配置这个标签,配置完这个标签后,spring就会去自动扫描base-package对应的路径或者该路径的子包下面的java文件,如果扫描 ...
- 轻松了解Spring中的控制反转和依赖注入(一)
我们回顾一下计算机的发展史,从最初第一台计算机的占地面积达170平方米,重达30吨,到现如今的个人笔记本,事物更加轻量功能却更加丰富,这是事物发展过程中的一个趋势,在技术领域中同样也是如此,企业级Ja ...
- Spring中的依赖查找和依赖注入
作者:Grey 原文地址: 语雀 博客园 依赖查找 Spring IoC 依赖查找分为以下几种方式 根据 Bean 名称查找 实时查找 延迟查找 根据 Bean 类型查找 单个 Bean 对象 集合 ...
- Spring中为什么不建议使用字段注入
在使用Idea中通过注解注入字段时是否遇见过这样一个提示: Field injection is not recommended(不推荐使用字段注入) 一. 什么是字段注入,Spring中依赖注入的方 ...
随机推荐
- VS2010 AnkhSvn
有时候打开别的项目用的是 TFS等 造成 VS本来用的AnkhSvn失效了 .工具---选项----插件选择---
- 微信公众号开发——创建自定义菜单(PHP版)
<?php include "TokenUtil.php"; //TokenUtil::build_access_token(); $access_token = Token ...
- [App Store Connect帮助]七、在 App Store 上发行(3.4)提交至“App 审核”:将构建版本从审核中移除
若要停止“App 审核”流程,您可以将该 App 版本从 App 审核中移除.要执行此项操作,App 状态必须为下列之一: 正在等待出口合规检查 正在等待审核 正在审核 等待开发者发布 等待 Appl ...
- (图论)51NOD 1298 圆与三角形
给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No".(三角形的面积大于0). 输入 第1行:一个数T, ...
- 我的ubuntu连vi都没有??那在命令行怎么编辑文件??
今天弄了个docker下的ubuntu官方镜像,想在镜像里做一点实验,免得把自己的环境写得乱七八糟. 把代码文件mount进去之后,开始编译,但是镜像太干净了,什么工具都没有,于是先装cmake ap ...
- 数据结构 - 链栈的实行(C语言)
数据结构-链栈的实现 1 链栈的定义 现在来看看栈的链式存储结构,简称为链栈. 想想看栈只是栈顶来做插入和删除操作,栈顶放在链表的头部还是尾部呢?由于单链表有头指针,而栈顶指针也是必须的,那干吗不让它 ...
- [ZPG TEST 110] 多边形个数【DP】
1. 多边形个数 (polygons.pas/c/cpp) [问题描述] 给定N线段,编号1到n.并给出这些线段的长度,用这些线段组成一个K边形,并且每个线段做多使用一次.若使用了一条不同编号的线段, ...
- C/C++带有空格的字符串输入
一.带有空格的字符串输入 (一)C++篇 1. 针对字符数组而言 方法一 getline() 读入整行数据,使用回车键输入换行符来确定输入结尾. 调用方法: cin.getline(str,len) ...
- bzoj2333[SCOI2011]棘手的操作 洛谷P3273 [SCOI2011]棘手的操作
2333? 先记一下吧,这题现在全部都是照着题解做的,因为怎么改都改不出来,只好对着题解改,以后还要再做过 以后再也不用指针了!太恶心了!空指针可不止直接特判那么简单啊,竟然还要因为空指针写奇怪的分类 ...
- 题解报告:hdu 1236 排名
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1236 Problem Description 今天的上机考试虽然有实时的Ranklist,但上面的排名 ...