单例模式在Spring注解上的一种拓展用法

写法一,先配置自身Bean,作为静态成员,然后目标Bean作为自身Bean的实例成员‘

Spring初始化自身Bean时自动装配数据源Bean,从而附属到静态成员上

使用@PostConstruct实现

package cn.ymcd.aisw.jobService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import javax.annotation.PostConstruct;
import javax.sql.DataSource;
import java.sql.*; /**
* @Description Job统一sql工具类
* @Author jianglun
* @Date 2022/5/26 0026 10:50
* @Version 1.0
*/
@Component
public class JDBCUtils {
@Autowired
private DataSource dataSource; public static JDBCUtils jdbcUtils; @PostConstruct
private void init(){
jdbcUtils = this;
jdbcUtils.dataSource = this.dataSource;
} // 定期过期商家
public static void invalidMerchant(){
Connection connection = null;
PreparedStatement statement = null;
try {
connection = jdbcUtils.dataSource.getConnection();
statement = connection.prepareStatement("update aisw_merchant set STATUS = 0, MERCHANT_STATUS = 2 where MERCHANT_VALID_DATE < ?");
statement.setDate(1, new Date(System.currentTimeMillis()));
statement.executeUpdate(); } catch (SQLException e) {
e.printStackTrace();
} finally {
// 关闭连接
try {
if(statement != null){
statement.close();
}
if(connection != null){
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}

  

我觉得这样要多浪费一个自身Bean放在里面

当然原理是一样,只是通过实例方法或者构造器方法进行实现

方法二,直接在构造器入参装配完成资源分配

package cn.ymcd.aisw.common;

import cn.ymcd.wss.util.log.YmcdLogger;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import javax.sql.DataSource;
import java.sql.Connection; /**
* @Description Job统一sql工具类
* @Author jianglun
* @Date 2022/5/26 0026 10:50
* @Version 1.0
*/
@Component
public class JdbcUtil {
private static final YmcdLogger LOGGER = new YmcdLogger(JdbcUtil.class); private static DataSource dataSource; @Autowired
private JdbcUtil(DataSource dataSource) {
JdbcUtil.dataSource = dataSource;
} @SneakyThrows
public static Connection getConnection() {
LOGGER.info("Static Variable Test ... {}", JdbcUtil.dataSource.toString());
return JdbcUtil.dataSource.getConnection();
} }

也可以在Set方法上面编写

package cn.ymcd.aisw.common;

import cn.ymcd.wss.util.log.YmcdLogger;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import javax.sql.DataSource;
import java.sql.Connection; /**
* @Description Job统一sql工具类
* @Author jianglun
* @Date 2022/5/26 0026 10:50
* @Version 1.0
*/
@Component
public class JdbcUtil {
private static final YmcdLogger LOGGER = new YmcdLogger(JdbcUtil.class); private static DataSource dataSource; @Autowired
private void setDataSource(DataSource dataSource) {
JdbcUtil.dataSource = dataSource;
} @SneakyThrows
public static Connection getConnection() {
LOGGER.info("Static Variable Test ... {}", JdbcUtil.dataSource.toString());
return JdbcUtil.dataSource.getConnection();
} }

  

【Java】Spring注入静态Bean的几种写法的更多相关文章

  1. spring注入静态变量有几种方法?不看的都掉坑里了!

    springboot中经常会用到properties文件中的配置,一般使用@Value注入,但是针对Utils工具类,需要注入一个静态变量有几种方法?为什么有的同学注入的值为null? 代码示例 如果 ...

  2. JSP中使用Spring注入的Bean时需要注意的地方

    遇到问题 遇到一个问题:在JSP中,使用Spring注入的Bean对象时,未能正确地获取到想要的对象. 郁闷的是,它也没报错. 研究问题 使用DEBUG功能(好久不在JSP里写Java代码了,都忘了J ...

  3. 普通Java类获取spring 容器的bean的5种方法

    方法一:在初始化时保存ApplicationContext对象方法二:通过Spring提供的工具类获取ApplicationContext对象方法三:继承自抽象类ApplicationObjectSu ...

  4. Spring容器装配Bean的三种方式

    欢迎查看Java开发之上帝之眼系列教程,如果您正在为Java后端庞大的体系所困扰,如果您正在为各种繁出不穷的技术和各种框架所迷茫,那么本系列文章将带您窥探Java庞大的体系.本系列教程希望您能站在上帝 ...

  5. Spring实战(三)Spring中装配Bean的三种方式---XML、JavaConfig、AutoWire

    创建应用对象之间协作关系的行为称为装配(wiring),这也是依赖注入的本质. Spring容器负责创建应用程序中的bean并通过DI来协调这些对象之间的关系,而开发者需要告诉Spring需要创建哪些 ...

  6. SpringJUnit4加载类目录下(src)和WEF-INF目录下的配置文件二--获取注入的bean的二种方式

    前言: spring容器以xml的形式注入bean,然后可以在类中获取,获取的形式主要有二种:第一种最简单--采用@Resource 或@Autowired关键字在加载spring文件时将bean注入 ...

  7. Spring注入静态变量的方法,以及CXF如何获取客户端IP

    1.如果使用@Resource注解来注入静态变量的,服务器启动就会报错的.可以新增一个set方法,同时在set方法上用@Resource注解来注入. 2.或者直接在Spring的配置文件中使用< ...

  8. SSH框架系列:Spring读取配置文件以及获取Spring注入的Bean

    分类: [java]2013-12-09 16:29 1020人阅读 评论(0) 收藏 举报 1.简介 在SSH框架下,假设我们将配置文件放在项目的src/datasource.properties路 ...

  9. Java基础系列-单例的7种写法

    原创文章,转载请标注出处:https://www.cnblogs.com/V1haoge/p/10755322.html 一.概述 Java中单例有7种写法,这个是在面试中经常被问到的内容,而且有时候 ...

  10. Java Spring学习笔记----Bean的依赖注入(设值注入方式)1

    Spring常用的两种依赖注入方式:一种是设值注入方式,利用Bean的setter方法设置Bean的属性值:另一种是构造注入,通过给Bean的构造方法传递参数来实现Bean的属性赋值: 1.设值注入方 ...

随机推荐

  1. .NET集成DeveloperSharp实现"高效分页"&"无主键分页"

    DeveloperSharp系列近期又被制造业ERP.民航飞行App.建筑BIM.电力掌上营业厅.等多家大型采用,站在巨人的肩膀上你能走的更远. 支持.Net Core2.0及以上,支持.Net Fr ...

  2. Java中try catch finally 关键字

    异常处理中的几个常用关键字(try catch finally throw throws) 异常处理 java中提供一套异常处理机制,在程序发生异常时,可以执行预先设定好的处理程序, 执行完成后,程序 ...

  3. python中datetime的常用操作

    datetime是用于处理日期和时间的模块,一些常用的操作可通过提供的基本函数实现.引入模块--import datetime. 1.datetime转字符串--strftime()函数 有两种写法: ...

  4. 解决Python使用GPU

    在Python中使用GPU进行计算通常涉及到一些特定的库,如NumPy.SciPy的GPU加速版本(如CuPy.PyCUDA等)或深度学习库(如TensorFlow.PyTorch等).这些库能够利用 ...

  5. C#.NET 国密 SM2 公钥证书从文本转换

    先前的 Util 是直接从文件中转换的 https://www.cnblogs.com/runliuv/p/15079404.html public static AsymmetricKeyParam ...

  6. js获取指定日期的前一天/后一天

    date代表指定日期,格式:2018-09-27 day代表天数,-1代表前一天,1代表后一天 // date 代表指定的日期,格式:2018-09-27// day 传-1表始前一天,传1表始后一天 ...

  7. spring jpa restful请求示例

    创建项目 导入jar包mysql 数据库和连接池jar <dependency> <groupId>org.springframework.boot</groupId&g ...

  8. uniapp iphone 6s获取时间戳失败

    上代码 时间格式:2023-10-11 00:00:00 var ms = new Date(item.content.goodsList[0].end_time).getTime() 使用iphon ...

  9. 使用GET方法访问网站

    使用GET方法访问网站 服务器接收get参数 server.py import flask app = flask.Flask(__name__) @app.route('/') def index( ...

  10. 如何从零开始集成DTM Android SDK

    什么是动态标签管理? 动态标签管理(Dynamic Tag Manager,简称"DTM"),可让开发者快速配置更新测量代码及相关代码片段,可以基于Web界面轻松地进行分析.测量代 ...