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的装配方式. 什么是依赖注入呢?也可以称为控制反转,简单的来说,一般完成稍微 ...
随机推荐
- [C++]STL - 队列(Queue) 栈(Stack) 链表(list)
STL - 队列(Queue) 栈(Stack) 链表(list) Queue 队列 结构特征 这是一种线性储存结构 其数据有先进先出的特点 这种特点被称为FIFO(First In First Ou ...
- 设置使用mac 自带终端记住密码
厌倦了 mac上每次登录linux服务器或树莓派时总是需要输入用户名和密码. 使用下列方法, 可以减少上述操作. 新建一个 .ssh 文件 vim pi4.ssh 添加如下内容 #!/usr/bin/ ...
- excel对比两个文档,判断范围内的取值是否在另一个列表内存在(vlookup函数的使用)
背景: sheet1表为原始数据: sheet2表为新的数据副本, 目标是查询sheet2列表中是否存在sheet1表的数据,并且标记出来,且获取sheet2列表的一些数据至sheet1列表中,补充D ...
- 万字长文:从 C# 入门学会 RabbitMQ 消息队列编程
RabbitMQ 教程 目录 RabbitMQ 教程 RabbitMQ 简介 安装与配置 安装 RabbitMQ 发布与订阅模型 生产者.消费者.交换器.队列 多工作队列 交换器类型 Direct F ...
- Vite4+Typescript+Vue3+Pinia 从零搭建(4) - 代码规范
项目代码同步至码云 weiz-vue3-template 要求代码规范,主要是为了提高多人协同和代码维护效率,结合到此项目,具体工作就是为项目配置 eslint 和 prettier. editorc ...
- 三分钟使用github的技巧
一.GitHub搜索技巧--找开发者 搜索条件 备注 location: location:china,匹配用户填写的地址在china language: language:javascript,匹配 ...
- Socket.D 网络应用协议,首版发布!
有用户说,"Socket.D 之于 Socket,尤如 Vue 之于 Js.Mvc 之于 Http" 主要特性 基于事件,每个消息都可事件路由 所谓语义,通过元信息进行语义描述 流 ...
- 记一次解决RestTemplate和HttpClient请求结果乱码的问题
调用一个接口,发送POST请求,浏览器和Postman均返回正常,代码中用RestTemplate和HttpClient均返回乱码 开始一直以为是编码问题导致,网上查了解决方法,也看了源码,都不对症 ...
- zookeeper JavaAPI 操作-watch监听
1.NodeCache监听代码: @Test public void testNodeCache() throws Exception { //1.创建NodeCache对象 NodeCache no ...
- 01 MyBatis第一个应用程序
1.MyBatis是什么? mybatis是一个基于java的持久层框架. 2.什么是持久化 数据由瞬态状态变为持久状态. 3.持久层: 完成持久化工作的代码块. -- DAO层,将数据存到数据库 4 ...