Spring Bean定义的三种方式
<!--Spring容器启动配置(web.xml文件)-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
一、基于XML的配置
适用场景:
- Bean实现类来自第三方类库,如:DataSource等
- 需要命名空间配置,如:context,aop,mvc等
<beans>
<import resource=“resource1.xml” />//导入其他配置文件Bean的定义
<import resource=“resource2.xml” />
<bean id="userService" class="cn.lovepi.***.UserService" init-method="init" destory-method="destory">
</bean>
<bean id="message" class="java.lang.String">
<constructor-arg index="0" value="test"></constructor-arg>
</bean>
</beans>
二、基于注解的配置
适用场景:
- 项目中自己开发使用的类,如controller、service、dao等
步骤如下:
1. 在applicationContext.xml配置扫描包路径
<context:component-scan base-package="com.lovepi.spring">
<context:include-filter type="regex" expression="com.lovepi.spring.*"/> //包含的目标类
<context:exclude-filter type="aspectj" expression="cn.lovepi..*Controller+"/> //排除的目标类
</context:component-scan>
注:<context:component-scan/> 其实已经包含了 <context:annotation-config/>的功能
2. 使用注解声明bean
Spring提供了四个注解,这些注解的作用与上面的XML定义bean效果一致,在于将组件交给Spring容器管理。组件的名称默认是类名(首字母变小写),可以自己修改:
- @Component:当对组件的层次难以定位的时候使用这个注解
- @Controller:表示控制层的组件
- @Service:表示业务逻辑层的组件
- @Repository:表示数据访问层的组件
@Service
public class SysUserService { @Resource
private SysUserMapper sysUserMapper; public int insertSelective(SysUser record){
return sysUserMapper.insertSelective(record);
} }
三、基于Java类的配置
适用场景:
- 需要通过代码控制对象创建逻辑的场景
- 实现零配置,消除xml配置文件
步骤如下:
- 使用@Configuration注解需要作为配置的类,表示该类将定义Bean的元数据
- 使用@Bean注解相应的方法,该方法名默认就是Bean的名称,该方法返回值就是Bean的对象。
- AnnotationConfigApplicationContext或子类进行加载基于java类的配置
@Configuration
public class BeansConfiguration { @Bean
public Student student(){
Student student=new Student();
student.setName("张三");
student.setTeacher(teacher());
return student;
} @Bean
public Teacher teacher(){
Teacher teacher=new Teacher();
teacher.setName("李四");
return teacher;
} }
public class Main {
public static void main(String args[]){
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(BeansConfiguration.class);
Student student = (Student) context.getBean("student");
Teacher teacher = (Teacher) context.getBean("teacher");
System.out.println("学生的姓名:" + student.getName() + "。老师是" + student.getTeacher().getName());
System.out.println("老师的姓名:" + teacher.getName());
}
}
参考:https://blog.csdn.net/lzh657083979/article/details/78524489
Spring Bean定义的三种方式的更多相关文章
- spring bean实例化的三种方式
一.使用类的无参构造创建 配置文件 java代码 注意若类里面没有无参的构造,则会出现异常 二.使用静态工厂创建 配置文件 java代码 Factory类 测试类 结果 三.使用实例工厂 配置文件 1 ...
- 【转】Spring学习---Bean配置的三种方式(XML、注解、Java类)介绍与对比
[原文]https://www.toutiao.com/i6594205115605844493/ Spring学习Bean配置的三种方式(XML.注解.Java类)介绍与对比 本文将详细介绍Spri ...
- Spring中bean实例化的三种方式
之前我已经有好几篇博客介绍Spring框架了,不过当时我们都是使用注解来完成注入的,具体小伙伴可以参考这几篇博客(Spring&SpringMVC框架案例).那么今天我想来说说如何通过xml配 ...
- Spring bean管理器 bean实例化的三种方式
bean实例化的三种方式实现 第一种:使用类的无参数构造方法创建(常用 重要) 第一种实例化方式最常用,实例化类时会通过调用无参构造方法创建.示例代码如下: package spring.com.Us ...
- spring中创建bean对象的三种方式以及作用范围
时间:2020/02/02 一.在spring的xml配置文件中创建bean对象的三种方式: 1.使用默认构造函数创建.在spring的配置文件中使用bean标签,配以id和class属性之后,且没有 ...
- 【Spring】的【bean】管理(XML配置文件)【Bean实例化的三种方式】
Bean实例化的三种方式 说明:通过配置文件创建对象就称为Bean实例化. 第一种:使用类的无参构造创建(重点) 实体类 package com.tyzr.ioc; public class User ...
- Spring 使用AspectJ的三种方式
Spring 使用AspectJ 的三种方式 一,使用JavaConfig 二,使用注解隐式配置 三,使用XML 配置 背景知识: 注意 使用AspectJ 的 时候 要导入相应的Jar 包 嗯 昨天 ...
- Spring静态注入的三种方式
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/chen1403876161/article/details/53644024Spring静态注入的三 ...
- spring生成EntityManagerFactory的三种方式
spring生成EntityManagerFactory的三种方式 1.LocalEntityManagerFactoryBean只是简单环境中使用.它使用JPA PersistenceProvide ...
随机推荐
- 使用Kali Linux执行中间人攻击(演示)
中间人攻击也叫Man-In-The-Middle-Attack. 我假设你已经知道中间人攻击的基本概念,引用一段wikipedia: 中间人攻击(Man-in-the-middle attack,缩写 ...
- Ubuntu 中 java 环境 (sunjdk) 的配置 (附详细说明)
暑假以来为了鼓捣双系统废了很大的劲儿,本来一股脑想装 CentOS,无奈怎么处理分区引导都不能成功地与 Win8 共存,最终用 Ubuntu 一句 "检测到系统上有 Windows Boot ...
- 解决"hibernate.hbm2ddl.auto" update值 无效
<property name="schemaUpdate"> <value>true</value> </property> 若果是 ...
- vi下的查找替换命令
1.查找 查找命令 /pattern:向下查找匹配的字符 ?pattern:向上查找匹配的字符 其中pattern是需要匹配的字符串,例如: /cd #全文查找cd / cd <Enter> ...
- fir分布式滤波的fpga实现
此设计的结构包括:1.移位寄存器链,n阶的有n-1个寄存器. 2.第一次累加部分.由fir滤波系数对称可得到对称的寄存器相加可以减小电路规模,所以第一次累加很有必要. 3,锁存并移位部分.此部分是为了 ...
- 使用Spring的StingUtils的commaDelimitedListToStringArray来获取字符串数组
有时候我们需要把一些带逗号的字符串解析为数组或者List.Set,如果自己转换的话比较麻烦,可以直接使用Spring的工具类StringUtils,通过配置文件调用该工具类方法即可.具体看例子 < ...
- WARNING: at drivers/gpio/gpiolib.c:101 gpio_ensure_requested+0x5c/0x118()
使用输入子系统实现的按键程序,每次按键后进入中断,就会报错如下: ---input_key_handler--- ------------[ cut here ]------------ WARNIN ...
- datasnap的初步
datasnap的初步-回调函数 服务器端 TServerMethods1 =class(TComponent) private { Private declarations } public { P ...
- 数据流重定向和管道命令, grep, tr,sort, wc, cut,split,tee,sleep(shell 02)
主要内容 1.标准输入输出和错误 2.管道命令和 grep, tr,sort, wc, cut,split,tee,sleep 标准输入输出和错误 标准输入(stdin) 是指令数据的输入,代码为0, ...
- RHEL6 64位ASM方式安装oracle 11gR2(一)
本文转载自 http://vnimos.blog.51cto.com/2014866/1221361 一.安装前的准备 1.1 确定操作系统环境 1 2 3 4 5 6 7 8 9 10 11 12 ...