单例模式在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. Qt-不规则窗口

    1  简介 参考视频:https://www.bilibili.com/video/BV1XW411x7NU?p=44 实现效果如下: 图片背景透明,可通过鼠标左键拖动图片(移动时以左上角为坐标),右 ...

  2. 绘图与可视化--matplotlib API入门

    matplotlib API函数都位于matplotlib.pyplot模块中. 本节代码中引入的约定为:import matplotlib.pyplot as plt 另外,numpy库也会用到,约 ...

  3. 童年神机小霸王(七) Mapper

    首发公号:Rand_cs,求关注支持 Mapper mapper,这个概念来源于 memory mapping,又叫做 Memory Management Circuit,它是解决地址映射的一种电路, ...

  4. linux系统下,安装maven教程

    1.下载 官网:https://maven.apache.org/download.cgi 2.上传包 将下载好的maven安装包apache-maven-3.8.6-bin.tar.gz放在磁盘的 ...

  5. 【简写Mybatis-02】注册机的实现以及SqlSession处理

    前言 注意: 学习源码一定一定不要太关注代码的编写,而是注意代码实现思想: 通过设问方式来体现代码中的思想:方法:5W+1H 源代码: https://gitee.com/xbhog/mybatis- ...

  6. C#.NET 简单使用log4net

    1.nuget 中安装log4net 2.添加一个配置文件"log4net2.config",内容如下: <?xml version="1.0" enco ...

  7. MESI--CPU缓存一致性协议

    概念 MESI(Modified Exclusive Shared Or Invalid)(也称为伊利诺斯协议,是因为该协议由伊利诺斯州立大学提出)是一种广泛使用的支持写回策略的缓存一致性协议. ME ...

  8. mybatis insert foreach批量添加

    mybatis insert foreach批量添加 int insertSelectiveBatch(List<ImageDetailEntity> myList); //写法1 < ...

  9. rest接口list参数接收

    list<String> post传参 ["1112","2222","3332"]list<Object> pos ...

  10. Libgdx游戏开发(4)——显示中文文字

    原文: Libgdx游戏开发(4)--显示中文文字-Stars-One的杂货小窝 本文代码示例采用kotlin代码进行讲解,且需要有libgdx入门基础 这里主要介绍关于在Libgdx显示文字的2种方 ...