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 ...
随机推荐
- PhotoPicker 从头到脚
1. 简介 PhotoPicker, 是一款开源的图片选择器.效果上和微信相似. 2. 使用方法 2.1 添加依赖 dependencies { compile 'me.iwf.photopicker ...
- zoj-3963 Heap Partition(贪心+二分+树状数组)
题目链接: Heap Partition Time Limit: 2 Seconds Memory Limit: 65536 KB Special Judge A sequence ...
- GO语言打包ICO图标
1. go get github.com/akavel/rsrc2. 创建manifest文件, 命名:main.exe.manifest : <?xml version="1.0&q ...
- Windows/Linux双系统时间错乱问题
问题描述 安装双系统后,切换系统的时候(Windows)系统时间会错乱 解决方式 百度经验Win/Lin 双系统时间错误的调整 注意1:最后两步更改硬件UTC时间 注意2:适用Windows系统为Wi ...
- GitHub Blog创建以及本地管理
创建 注册GitHub账户 首页点击新建仓库 New repository repository name必须为 Owner.github.io EX:我的Owner下为pualus,那么就应为pua ...
- WCF *.svc 自定义地址路由映射
一般在创建WCF服务时会用Serivce.svc文件访问,地址如:http://localhost/applicationname/Serivce.svc/Name 现在用路由映射成:http://l ...
- 【WCF安全】WCF 自定义授权[用户名+密码+x509证书]
1.x509证书制作(略) 2.直接贴代码 ----------------------------------------------------------------------服务端----- ...
- Django--django-admin.py on windows does not work
使用命令:Python django-admin.py startproject projectname 使用django-admin.py startapp myblog没有创建新的app,使用下面 ...
- 使用.NET Remoting开发分布式应用——配置文件篇
我们已经知道可以通过编码的方式配置服务器通道和远程客户机,除此之外,还可以使用配置文件对服务器通道和远程客户机进行配置.使用远程客户机和服务器对象的配置文件的优点在于,用户无需修改任何一行代码,也无需 ...
- 归并排序的JavaScript实现
思想 这是一种分治算法.将原始数组切分成较小的数组,直到每个小数组只有一项,然后在将小数组归并为排好序的较大数组,直到最后得到一个排好序的最大数组. 代码 function mergeSort(arr ...