Solon2 开发之IoC,二、构建一个 Bean 的三种方式
1、手动
简单的构建:
//生成普通的Bean
Solon.context().wrapAndPut(UserService.class, new UserServiceImpl());
//生成带注解的Bean(比如:@Controller)
Solon.context().beanMake(UserServiceImpl.class);
更复杂的手动,以适应特殊的需求:
UserService bean = new UserServiceImpl();
//可以进行手动字段注入
Solon.context().beanInject(bean);
//可以再设置特殊的字段
bean.setXxx("xxx");
//包装Bean(指定名字的)
BeanWrap beanWrap = Solon.context().wrap("userService", bean);
//包装Bean(指定类型的)
//BeanWrap beanWrap = Solon.context().wrap(UserService.class, bean);
//以名字注册
Solon.context().putWrap("userService", beanWrap);
//以类型注册
Solon.context().putWrap(UserService.class, beanWrap);
下面2种模式,必须要被扫描到。在不便扫描,或不须扫描时手动会带来一种自由感。
2、用配置器类
本质是 @Configuration + @Bean 的组合,并且 Config 要被扫描到
@Configuration
public class Config{
//以类型进行注册(默认) //可用 @Inject(UserService.class) 注入
@Bean
public UserService build(){
return new UserServiceImpl();
}
//以名字进行注册 //可用 @Inject("userService") 注入
//@Bean("userService")
//public UserService build2(){
// return new UserServiceImpl();
//}
//同时以名字和类型进行注册 //支持类型或名字注入
//@Bean(name="userService", typed=true)
//public UserService build2(){
// return new UserServiceImpl();
//}
}
使用带条件的构建
@Configuration
public class Config{
@Bean
public CacheService cacheInit(@Inject("${cache.enable}") boolean enable,
@Inject("${cache.config}") CacheServiceSupplier supper){
if(enable){
return supper.get();
}else{
return null;
}
}
}
顺带,还可以借用 @Configuration + @Bean 的组合,进行初始化
@Configuration
public class Config{
@Bean
public void titleInit(@Inject("${demo.title}") String title){
Config.TITLE = title;
}
@Bean
public void dsInit(@Inject("${demo.ds}") String ds) {
String[] dsNames = ds.split(",");
for (String dsName : dsNames) {
Props props = Solon.cfg().getProp("demo.db-" + dsName);
if (props.size() > 0) {
//按需创建数据源
DataSource db1 = props.getBean("", HikariDataSource.class);
//手动推到容器内
BeanWrap bw = Solon.context().wrap(DataSource.class, db1);
Solon.context().putWrap(dsName, bw);
}
}
}
}
//
// 相对于 @Init 的区别:@Bean 是在容器扫描时执行的;@Init 是在容器扫描完成后后执行的。
//
3、使用组件注解(必须要能被扫描到)
a. 以类型进行注册(默认)
@Component
public class UserServiceImpl implements UserService{
}
//通过 @Inject(UserService.class) 注入
//通过 Solon.context().getBean(UserService.class) 手动获取 //要确保组件已注册
b. 以名字进行注册
@Component("userService")
public class UserServiceImpl implements UserService{
}
//通过 @Inject("userService") 注入
//通过 Solon.context().getBean("userService") 手动获取 //要确保组件已注册
c. 以名字和类型同时进行注册
@Component(name="userService", typed=true)
public class UserServiceImpl implements UserService{
}
//通过 @Inject("userService") 注入
//通过 Solon.context().getBean("userService") 手动获取 //要确保组件已注册
//通过 @Inject(UserService.class) 注入
//通过 Solon.context().getBean(UserService.class) 手动获取 //要确保组件已注册
Solon2 开发之IoC,二、构建一个 Bean 的三种方式的更多相关文章
- Solon 开发,三、构建一个Bean的三种方式
Solon 开发 一.注入或手动获取配置 二.注入或手动获取Bean 三.构建一个Bean的三种方式 四.Bean 扫描的三种方式 五.切面与环绕拦截 六.提取Bean的函数进行定制开发 七.自定义注 ...
- spring创建bean的三种方式
spring创建bean的三种方式: 1通过构造方法创建bean(最常用) 1.1 spring默认会通过无参构造方法来创建bean,如果xml文件是这样配置,则实体类中必须要有无参构造方法,无参构造 ...
- Spring学习之实例化bean的三种方式
实例化bean的三种方式 构造器实例化bean Person.java public class Person { private String name; private Integer age; ...
- 彻底了解构建 JSON 字符串的三种方式
原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7701856.html 前言:JSON 是轻量级的数据交换格式,很常用,尤其是在使用 Ajax ...
- 02Spring基于xml的IOC配置--实例化Bean的三种方式
maven依赖 <dependencies> <!--IOC相关依赖--> <dependency> <groupId>org.springframew ...
- Spring装配Bean的三种方式+导入和混合配置
目录 Spring IoC与bean 基于XML的显式装配 xml配置的基本结构 bean实例的三种创建方式 依赖注入的两种方式 构造器注入方式 setter方法注入方式 利用命名空间简化xml 基于 ...
- SpringBoot引入第三方jar的Bean的三种方式
在SpringBoot的大环境下,基本上很少使用之前的xml配置Bean,主要是因为这种方式不好维护而且也不够方便. 因此本篇博文也不再介绍Spring中通过xml来声明bean的使用方式. 一.注解 ...
- spring装配bean的三种方式及其混合装配
在spring容器中装配bean有三种基本方式和混合装配方式: 隐式的bean自动发现机制和自动装配 在java中进行显式配置 在xml中配置 混合装配(在多个java文件中配置.在JavaConfi ...
- spring4笔记----使用装配注入合作者Bean的三种方式
no :不自动装配 byName :id(name)与setter方法去set前缀,并小写首字母后同名的Bean完成注入,如有多个匹配则抛异常 byType :spring容器找全部bean,如果找到 ...
- spring 装配bean的三种方式
这段时间在学习Spring,依赖注入DI和面向切面编程AOP是Spring框架最核心的部分.这次主要是总结依赖注入的bean的装配方式. 什么是依赖注入呢?也可以称为控制反转,简单的来说,一般完成稍微 ...
随机推荐
- SQL改写案例4(开窗函数取中位数案例)
周总找我问个报表SQL实现逻辑的案例,废话不说给他看看. 原SQL: SELECT d.tname 姓名, d.spname 岗位, d.sum_cnt 报单单量, d.min_cnt 放款单量, d ...
- Spring 缓存注解这样用,太香了!
作者最近在开发公司项目时使用到 Redis 缓存,并在翻看前人代码时,看到了一种关于 @Cacheable 注解的自定义缓存有效期的解决方案,感觉比较实用,因此作者自己拓展完善了一番后分享给各位. S ...
- 2007年对Youtube小视频的分析文章
Understanding the Characteristics of Internet Short Video Sharing: YouTube as a Case Study 视频的种类 该研究 ...
- Vivado生成bitstream时报错[Opt 31-67] Problem: A LUT3 cell in the design is missing a connection on input pin I1, which is used by the LUT equation
这个原因主要是因为有一个引脚没有用到,解决方法. 1.打开Schematic. 2.根据提示的模块去找,比如说我的报错. [Opt 31-67] Problem: A LUT3 cell in the ...
- .NET领域性能最好的对象映射框架Mapster使用方法
Mapster是一个开源的.NET对象映射库,它提供了一种简单而强大的方式来处理对象之间的映射.在本文中,我将详细介绍如何在.NET中使用Mapster,并提供一些实例和源代码. 和其它框架性能对比: ...
- Cadence SPB 22.1 --学习基础01Day
1.电路图设计 ①.原理图设计 原理图符号-->原理图库:代替实际电子元器件的符号,主要就是引脚数目.引脚序号与实物对应: ②.PCB设计 PCB符合-->PCB封装库:电子元器件的各种实 ...
- BI到底是什么,是否所有企业都适合上BI?
商业智能(Business Intelligence)的概念 商业智能(BI)是一种综合性的数据分析和决策支持系统,旨在帮助企业从海量的数据中提取有价值的信息,并将其转化为洞察力.报告和可视化呈现,以 ...
- mysql可视化工具有哪些?优点是什么?
MySQL 是一种广泛使用的关系型数据库管理系统(RDBMS),由于其开放源代码和高度可定制化的优势,广受开发者欢迎.为了更加高效地管理 MySQL 数据库,我们通常需要使用 MySQL 可视化工具. ...
- 【开源项目推荐】通用SQL数据血缘分析工具——Sqllineage
大家好,我是独孤风,从本周开始,争取每周为大家带来一个优秀的开源项目推荐. 开源项目不仅促进了技术的发展和普及,还为全球范围内的开发者和用户社区建立了一个共享知识.协作和创新的平台.站在巨人的肩膀上才 ...
- [ABC309G] Ban Permutation
Problem Statement Find the number, modulo $998244353$, of permutations $P=(P_1,P_2,\dots,P_N)$ of $( ...