spring bean
什么是Bean?
被spring容器管理的java实例化对象
怎么配置?
spring3.x提供了三种配置方式
一、基于XML配置
<bean id=“loginUserDao” class=“com.chinalife.dao.impl.LoginUserDaoImpl” lazy-init=“true” init-method=“myInit” destroy-method=“myDestroy” scope=“prototype”> …… </bean>
在XML配置中,通过<bean></bean>来定义bean,通过id或name属性定义bean的名称,如果未指定id和name,则自动将类名作为bean的名称。通过<property>子元素或者p命名空间的动态属性为bean注入值。还可以通过<bean>的init-method属性指定bean实现类的方法名来设置生命过程方法(最多指定一个初始化方法和销毁方法)。通过<bean>的scope指定bean的作用范围。通过lazy-init属性指定是否延迟初始化。
当bean的实现类来源于第三方类库,比如DataSource、Hibernate Template等,无法在类中标注注解信息时,只能通过XML进行配置,而且命名空间的配置,比如aop、context等,也只能采用基于XML的配置。
二、基于注解的配置
@Scope(“prototype”) @Lazy(true) @Component(“loginUserDao”) public class LoginUserDao { …… // 用于设置初始化方法 @PostConstruct public void myInit() { } // 用于设置销毁方法 @PreDestroy public void myDestroy() { } }
在bean实现类中通过一些Annotation来标注bean类:
@Component:标注一个普通的spring bean类(可以指定bean名称,未指定时默认为小写字母开头的类名)
@Controller:标注一个控制器类
@Service:标注一个业务逻辑类
@Repository:标注一个DAO类
通过在成员变量或者方法入参处标注@Autowired按类型匹配注入(byType注入,@Resource按byName注入),也可以使用@Qualififier按名称配置注入。通过在方法上标注@PostConstrut和@PreDestroy注解指定的初始化方法和销毁方法(可以定义任意多个)。通过@Scope("prototype")指定bean的作用范围。通过在类定义处标注@Lazy(true)指定bean的延迟加载。
@Autowired 与@Resource的区别:
1、@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入
2、@Resource默认通过名称注入,如名称无找到则通过类型注入,由jdk提供
3、@AutoWired默认通过类型注入,如存在多个类型则通过名称注入,由spring提供(可以配合
)三、基于Java类配置
@Configuration public class Conf { @Scope(“prototype”) @Bean(“loginUserDao”) public LoginUserDao loginUserDao() { return new LoginUserDao(); } }
在标注了@Configuration的java类中,通过在类方法标注@Bean定义一个bean。方法必须提供bean的实例化逻辑。通过@Bean的name属性可以定义bean的名称,未指定时默认名称为方法名。在方法处通过@Autowired使方法入参绑定bean,然后在方法中通过 代码进行注入;也可以调用配置 类的@Bean方法进行注入。通过@Bean的initMethod或destroyMethod指定一个初始化或者销毁方法。通过@Scope指定bean的作用范围。@Lazy指定延迟初始化。
原文地址:https://www.cnblogs.com/guuyoog/p/11772123.html
- 03 JVM的垃圾回收机制
- Tomcat就是这么简单
- Servlet第三篇【request和response介绍、response的常见应用】
- 通过java来格式化sql语句(r4笔记第61天)
- Servlet第四篇【request对象常用方法、应用】
- Servlet第五篇【介绍会话技术、Cookie的API、详解、应用】
- Java类加载器(用户自定义类加载器实现)
- Servlet第六篇【Session介绍、API、生命周期、应用、与Cookie区别】
- 一个oracle蠕虫病毒 (r4笔记第60天)
- 提高效率,eclipse上你可能不知道的技巧
- AJAX入门这一篇就够了
- 014 Java的反射机制
- XML+JSON面试题都在这里
- 客户关系管理系统
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 10、图像的几何变换——平移、镜像、缩放、旋转、仿射变换 OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(1)OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(2)数字图像
- String、StringBuiler、StringBuffer,谁性能最高?
- 图像的几何变换——平移、镜像、缩放、旋转、仿射变换 OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(1)OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(2)数字图像处理笔
- 详说C#中的结构struct
- c#结构体总结
- 跨域问题(CORS / Access-Control-Allow-Origin)
- C#中的结构体与类的区别
- c#结构体与类的区别,及使用技巧 C#中的结构体与类的区别
- hikvision SDK使用(转)
- 《Scikit-Learn与TensorFlow机器学习实用指南》 第11章 训练深度神经网络(上)
- 海康SDK开发步骤
- 《Scikit-Learn与TensorFlow机器学习实用指南》 第11章 训练深度神经网络(下)
- applet跨域访问的安全性问题(java.security.AccessControlException:access denied)
- JSON解析问题:net.sf.json.JSONException: There is a cycle in the hierarchy!
- 海康相机SDK联合c++标定