- 浏览: 399371 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (760)
- 股票日志 (26)
- Selenium (0)
- selenium 2 环境的搭建 (1)
- 并发 (7)
- 框架开发 (1)
- 动态代理 (2)
- Struts2 (2)
- POI (2)
- jdk (3)
- maven (31)
- spring (35)
- mysql (31)
- 工作机会 (3)
- xtream (1)
- oracle dbms_metadata GET_DDL (0)
- SSI (1)
- DB (61)
- powermock (4)
- java 基础 (25)
- 多线程 (11)
- 高手 (2)
- java 底层 (2)
- 专业网站 (1)
- 开发联想 (1)
- 开发联想 (1)
- bat文件 (2)
- 清queue 语句 (1)
- 清queue 语句 (1)
- jquery (7)
- html5 (1)
- Jenkins (10)
- Linux (17)
- 工作issue (2)
- tomcat log (3)
- jvm (23)
- 项目细节 (0)
- oracle (41)
- 泛型 (3)
- 新知识点 (1)
- 数据库ddl 语句 (0)
- AQ (2)
- jms (0)
- 网络资源 (6)
- github (6)
- Easymock (1)
- Dom 解析XML (1)
- windows命令 (2)
- java (7)
- 正则表达式 (5)
- sequence (1)
- oracle 表meta信息 (1)
- 小工具技巧 (1)
- 辅助工具 (1)
- Junit (1)
- 泛型 generic (2)
- Java程序设计 (1)
- cglib (2)
- 架构师之路 (1)
- 数据库连接池 (5)
- c3p0 (1)
- eclipse使用 (1)
- oracle sql plus (1)
- 码农人生 (3)
- SVN (15)
- sqlplus (2)
- jsoup (1)
- 网络爬虫 (2)
- 新技能 (1)
- zookeeper (4)
- hadoop (1)
- SVNKIT (1)
- 从工具到知识点的整理 (1)
- log4j (13)
- 读文件 (0)
- 转义字符 (1)
- command (1)
- web service (3)
- 锁 (1)
- shell 脚本 (1)
- 遇到的错误 (2)
- tomcat (14)
- 房产 (5)
- bootstrap jquery ui (1)
- easyui (2)
- 个人征信 (1)
- 读写分离 (1)
- 备份 (1)
- rmi (6)
- webservice (1)
- JMX (4)
- 内存管理 (3)
- java设计 (1)
- timer (1)
- lock (2)
- concurrent (2)
- collection (1)
- tns (1)
- java基础 (15)
- File (1)
- 本机资源 (1)
- bat (1)
- windows (4)
- 数据结构 (3)
- 代码安全 (1)
- 作用域 (1)
- 图 (2)
- jvm内存结构 (1)
- 计算机思想 (1)
- quartz (6)
- Mongo DB (2)
- Nosql (4)
- sql (5)
- 第三方Java 工具 jar 项目 (2)
- drools (1)
- java swing (2)
- 调用console (1)
- runtime (1)
- process (1)
- swing (2)
- grouplayout (1)
- dubbo (0)
- bootstrap (0)
- nodejs (2)
- SVN hooks (1)
- jdbc (3)
- jdbc error (1)
- precedure (1)
- partition_key (1)
- active mq (1)
- blob (2)
- Eclipse (6)
- web server (1)
- bootstrapt (2)
- struts (1)
- ajax (1)
- js call back (1)
- 思想境界拓展 (1)
- JIRA (1)
- log (1)
- jaxb (3)
- xml java互相转换 (1)
- 装修 (2)
- 互联网 (2)
- threadlocal (3)
- mybatis (22)
- xstream (1)
- 排序 (1)
- 股票资源 (1)
- RPC (2)
- NIO (3)
- http client (6)
- 他人博客 (1)
- 代理服务器 (1)
- 网络 (2)
- web (1)
- 股票 (5)
- deadlock (1)
- JConsole (2)
- activemq (3)
- oralce (1)
- 游标 (1)
- 12月13日道富内部培训 (0)
- grant (1)
- 速查 (2)
- classloader (4)
- netty (4)
- 设计模式 (2)
- 缓存 (2)
- ehcache (2)
- framework (1)
- 内存分析 (2)
- dump (1)
- memory (2)
- 多高线程,并发 (1)
- hbase (2)
- 分布式系统 (1)
- socket (3)
- socket (1)
- 面试问题 (1)
- jetty (2)
- http (2)
- 源码 (1)
- 日志 (2)
- jni (1)
- 编码约定 (1)
- memorycache (1)
- redis (13)
- 杂谈 (1)
- drool (1)
- blockingqueue (1)
- ScheduledExecutorService (1)
- 网页爬虫 (1)
- httpclient (4)
- httpparser (1)
- map (1)
- 单例 (1)
- synchronized (2)
- thread (1)
- job (1)
- hashcode (1)
- copyonwriteArrayList (2)
- 录制声音 (1)
- java 标准 (2)
- SSL/TLS (1)
- itext (1)
- pdf (1)
- 钻石 (2)
- sonar (1)
- unicode (1)
- 编码 (4)
- html (1)
- SecurityManager (1)
- 坑 (1)
- Restful (2)
- svn hook (1)
- concurrentHashMap (1)
- 垃圾回收 (1)
- vbs (8)
- visual svn (2)
- power shell (1)
- wmi (3)
- mof (2)
- c# (1)
- concurrency (1)
- 劳动法 (1)
- 三国志游戏 (2)
- 三国 (1)
- 洪榕 (2)
- 金融投资知识 (1)
- motan (1)
- tkmybatis mapper (1)
- 工商注册信息查询 (1)
- consul (1)
- 支付业务知识 (2)
- 数据库备份 (1)
- 字段设计 (1)
- 字段 (1)
- dba (1)
- 插件 (2)
- PropEdit插件 (1)
- web工程 (1)
- 银行业知识 (2)
- 国内托管银行 (1)
- 数据库 (1)
- 事务 (2)
- git (18)
- component-scan (1)
- 私人 (0)
- db2 (14)
- alias (1)
- 住房 (1)
- 户口 (1)
- fastjson (1)
- test (6)
- RSA (2)
- 密钥 (1)
- putty (1)
- sftp (1)
- 加密 (1)
- 公钥私钥 (3)
- markdown (1)
- sweet (1)
- sourcetree (1)
- 好工具 (1)
- cmd (1)
- scp (1)
- notepad++ (1)
- ssh免密登录 (1)
- https (1)
- ssl (2)
- js (2)
- h2 (1)
- 内存 (2)
- 浏览器 (1)
- js特效 (1)
- io (1)
- 乱码 (1)
- 小工具 (1)
- 每周技术任务 (1)
- mongodb (7)
- 内存泄漏 (1)
- 码云 (2)
- 如何搭建java 视频服务器 tomcat (1)
- 资源 (1)
- 书 (1)
- 四色建模法 (1)
- 建模 (1)
- 配置 (1)
- 职位 (1)
- nginx (1)
- excel (1)
- log4j2 (2)
- 做菜 (1)
- jmap (1)
- jspwiki (1)
- activiti (1)
- 工作流引擎 (1)
- 安卓 (1)
- acitviti 例子 (1)
- 二维码 (1)
- 工作流 (1)
- powerdesign (2)
- 软件设计 (1)
- 乐观锁 (1)
- 王者荣耀 (1)
- session (2)
- token (5)
- cookie (4)
- springboot (24)
- jwt (2)
- 项目路径 (1)
- magicbook (1)
- requestType (1)
- json (2)
- swagger (1)
- eolinker (1)
- springdata (1)
- springmvc (1)
- controlleradvice (1)
- profile (1)
- 银行四要素 (1)
- 支付人员资源 (1)
- 支付渠道 (1)
- yaml (1)
- 中文编码 (1)
- mongo (2)
- serializable (1)
- 序列化 (1)
- zyd (1)
- unittest (1)
- 工具 (1)
- Something (1)
- 通达信 (1)
- protobuf (1)
- 算法 (1)
- springcloud (2)
- hikari (1)
- rocketmq (7)
- cachecloud (1)
- serfj (1)
- axure (1)
- lombok (1)
- 分布式锁 (1)
- 线程 (2)
- 同步代码块 (1)
- cobar (1)
- mq (1)
- rabbitmq (1)
- 定时执行 (1)
- 支付系统 (3)
- 唱歌 (1)
- elasticjob (1)
- 定时任务 (1)
- 界面 (1)
- flink (2)
- 大数据 (1)
- 接私活 (0)
- 内部培训 (2)
最新评论
-
dannyhz:
做股票从短线 试水,然后 慢慢发现 波段和 中期的故事可挖, ...
搭台唱戏 -
dannyhz:
http://developer.51cto.com/art/ ...
如何自己开发框架 它的注意点是什么
引用
不用 spring 注入方式
package com.sunrun.console.service.impl; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import javax.annotation.Resource; import org.junit.Test; import org.springframework.aop.framework.AdvisedSupport; import org.springframework.aop.framework.AopProxy; import org.springframework.aop.support.AopUtils; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.sunrun.console.constant.SysCst; import com.sunrun.console.service.ISettleService; import com.sunrun.mpos.common.core.PropertiesHolder; import org.junit.Assert; public class SettleServiceImplTest{ @Test public void suppose_bank_settle_no_is_null() throws Exception{ ApplicationContext act = new ClassPathXmlApplicationContext(new String[]{"config/console-context.xml"}); ISettleService settleService = (ISettleService)act.getBean(ISettleService.class); SettleServiceImpl ssi = (SettleServiceImpl)getTargetObject(settleService);; Method methodConfig = SettleServiceImpl.class.getMethod("configBankSettleNoAndName", StringBuffer.class); methodConfig.setAccessible(true); StringBuffer result = new StringBuffer(""); methodConfig.invoke(ssi, result); System.out.println(result.toString()); System.out.println(PropertiesHolder.getValue(SysCst.SettleCst.SETTLE_BANK_NO)); System.out.println(PropertiesHolder.getValue(SysCst.SettleCst.SETTLE_BANK_NAME)); //String rs = "<bankSettleNo>888888888888</bankSettleNo><bankSettleName>中信银行上海分行营业部</bankSettleName>"; String rs = "<bankSettleNo>7332410182600005752</bankSettleNo><bankSettleName>中信10321325</bankSettleName>"; Assert.assertEquals(rs, result.toString());; } public static Object getTargetObject(Object proxy) throws Exception { if(!AopUtils.isAopProxy(proxy)) { //判断是否是代理类 return proxy; } return getTargetObject(getProxyTargetObject(proxy)); } private static Object getProxyTargetObject(Object proxy) throws Exception { Field h = proxy.getClass().getSuperclass().getDeclaredField("h"); h.setAccessible(true); AopProxy aopProxy = (AopProxy) h.get(proxy); Field advised = aopProxy.getClass().getDeclaredField("advised"); advised.setAccessible(true); return ((AdvisedSupport)advised.get(aopProxy)).getTargetSource().getTarget(); } }
引用
spring 注入方式 , 继承 TestBase
package com.sunrun.tesbase; import org.junit.runner.RunWith; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import junit.framework.TestCase; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:config/console-context.xml" }) public class BaseTest extends TestCase { protected Logger logger = LoggerFactory.getLogger(getClass()); } package com.sunrun.console.service.impl; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import javax.annotation.Resource; import org.junit.Test; import org.springframework.aop.framework.AdvisedSupport; import org.springframework.aop.framework.AopProxy; import org.springframework.aop.support.AopUtils; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.sunrun.console.constant.SysCst; import com.sunrun.console.service.ISettleService; import com.sunrun.mpos.common.core.PropertiesHolder; import com.sunrun.tesbase.BaseTest; import org.junit.Assert; public class SettleServiceImplTestWithBase extends BaseTest{ @Resource private ISettleService settleService; @Test public void suppose_bank_settle_no_is_null() throws Exception{ SettleServiceImpl ssi = (SettleServiceImpl)getTargetObject(settleService);; Method methodConfig = SettleServiceImpl.class.getMethod("configBankSettleNoAndName", StringBuffer.class); methodConfig.setAccessible(true); StringBuffer result = new StringBuffer(""); methodConfig.invoke(ssi, result); System.out.println(result.toString()); System.out.println(PropertiesHolder.getValue(SysCst.SettleCst.SETTLE_BANK_NO)); System.out.println(PropertiesHolder.getValue(SysCst.SettleCst.SETTLE_BANK_NAME)); //String rs = "<bankSettleNo>888888888888</bankSettleNo><bankSettleName>中信银行上海分行营业部</bankSettleName>"; String rs = "<bankSettleNo>7332410182600005752</bankSettleNo><bankSettleName>中信10321325</bankSettleName>"; Assert.assertEquals(rs, result.toString());; } public static Object getTargetObject(Object proxy) throws Exception { if(!AopUtils.isAopProxy(proxy)) { //判断是否是代理类 return proxy; } return getTargetObject(getProxyTargetObject(proxy)); } private static Object getProxyTargetObject(Object proxy) throws Exception { Field h = proxy.getClass().getSuperclass().getDeclaredField("h"); h.setAccessible(true); AopProxy aopProxy = (AopProxy) h.get(proxy); Field advised = aopProxy.getClass().getDeclaredField("advised"); advised.setAccessible(true); return ((AdvisedSupport)advised.get(aopProxy)).getTargetSource().getTarget(); } }
发表评论
-
spring mvc的工作原理 有图很清晰
2018-09-29 11:01 387引用 https://www.cnblogs.com/xiao ... -
spring property loader的 placeholder的详细分析
2018-09-29 10:59 404引用 https://blog.csdn.net/liuxin ... -
对于spring controller的详细分析和使用指导
2018-09-29 10:58 412引用 https://www.cnblogs.com/lcs- ... -
简单servlet spring 已经mvc controller
2018-09-28 20:42 327引用 https://blog.csdn.net/liuxin ... -
@value 的详解
2018-08-23 19:07 441引用 http://www.cnblogs.com/kings ... -
spring mvc ,spring boot里面的关于 global exception handle , controller advice的解释
2018-07-18 12:43 595引用 https://blog.csdn.net/kingin ... -
关于spring 的json的传递 yixiaoping
2018-06-29 22:01 253https://blog.csdn.net/**/articl ... -
github 下载具体版本的 spring
2018-06-06 22:02 396引用https://blog.csdn.net/bbc2005 ... -
tomcat 到 servlet 到 spring servlet dispatcher的一串
2018-05-30 21:57 616引用 五月 30, 2018 9:31:35 下午 org. ... -
前三句可以打印 mybatis log
2018-03-25 21:46 460引用 @Test public void test( ... -
spring整合 quartz
2018-03-06 22:07 337http://blog.csdn.net/YangRunkan ... -
spring 4 value annotation的使用
2018-02-22 13:22 352http://www.jb51.net/article/123 ... -
spring 配置文件的安排 包括linux和windows和本地
2018-02-01 14:35 521引用 <bean id="propertyC ... -
批量插入数据
2018-01-04 20:57 406https://www.cnblogs.com/LiQ0116 ... -
MyBatis-Spring整合 注入SqlSessionTemplate
2018-01-04 20:41 705http://blog.csdn.net/qq_3965444 ... -
spring标签 @Resource 出错的track
2017-12-27 15:19 413引用 org.springframework.beans ... -
spring中何时用resource 和 service
2017-12-26 20:44 470引用 Spring中什么时候用@Resource,什么时候用 ... -
Spring 配置多数据源实现数据库读写分离
2017-12-26 20:34 375http://uule.iteye.com/blog/2126 ... -
基于注解的Spring多数据源配置和使用
2017-12-24 18:39 458https://www.cnblogs.com/liujidu ... -
lixiang 关于socket的spring例子
2017-12-04 16:21 342https://github.com/spring-proje ...
相关推荐
依赖注入是IoC的一种具体实现方式,它允许对象在运行时动态地获得依赖。Spring支持三种类型的依赖注入: 1. **构造器注入**:通过构造函数传入依赖对象。 2. **设值注入**:使用setter方法注入依赖。 3. **接口注入...
而对于类,Spring则使用CGLIB库生成子类代理。这两种方式都是在运行时生成代理对象,从而在方法调用前后插入切面逻辑。 接下来,我们转向DataSource的实现。在Spring中,DataSource是用于存储和管理数据库连接的...
在Spring中,典型的获取ApplicationContext对象的方式是使用ApplicationContext接口的一个实现类,如ClassPathXmlApplicationContext。这是一个根据给定XML文件的类路径的上下文实现。通常我们会在初始化Spring IoC...
Spring框架,作为一个强大的Java企业级应用开发平台,自3.0版本开始,对RESTful服务的支持得到了极大的增强。本篇文章将深入探讨如何利用Spring 3.0来创建RESTful服务,并通过实例解析其核心概念和技术。 首先,...
- **服务提供者**:在Spring Boot项目中定义服务接口,并使用`@Service`注解标记服务实现类,再使用`@DubboService`注解暴露服务。 - **服务消费者**:同样在Spring Boot项目中定义服务接口,并使用`@Reference`注解...
4. 配置Spring:创建Spring配置文件,声明远程接口的bean,并设置其代理为RMI实现类。 客户端(client)则负责: 1. 获取远程对象:通过RMI的`lookup()`方法,根据远程接口的名称从RMI注册表获取远程对象。 2. 调用...
而IoC的方法是只在类A中定义好用于关联接口B的实现的方法,将类A,接口B和接口B的实现C放入IoC的容器(Container)中,通过一定的配置由容器(Container)来实现类A与接口B的实现C的关联。 四、Spring对多种ORM框架...
在本压缩包中,你将获得Spring 3.2版本的源码jar包,这对于开发者来说是一个宝贵的资源,可以深入理解Spring的工作原理,提高代码调试和优化的能力。 首先,让我们来了解一下Spring 3.2的主要特性: 1. **依赖注入...
在本项目中,我们主要探讨如何使用Spring Boot框架来实现用户登录、转盘游戏功能以及相关的数据存储。Spring Boot以其简洁的配置和强大的依赖管理,成为现代Java Web开发的首选框架。下面我们将深入讨论这些关键知识...
在Spring AOP中,我们可以定义一个`@Aspect`类,这个类包含若干个`@Before`,`@After`,`@Around`等注解的方法,这些方法会在相应的切点(pointcut)执行前、后或周围执行。在数据脱敏的场景下,我们可能需要在响应...
这表明我们不仅得到了Spring MVC的相关资源,还获得了Hibernate 3.6.8版本的资料,这是一个流行的Java对象关系映射(ORM)框架,用于简化数据库操作。 1. **Spring MVC**: - **基本概念**:Spring MVC提供了一个...
总之,《Spring揭秘》是一本全面覆盖Spring框架各个方面的书籍,无论你是初学者还是经验丰富的开发者,都能从中获得宝贵的知识和实践经验,提升你的Spring技术水平。通过阅读这本书,你可以深入了解Spring的内在机制...
这通常用于实现类的懒加载或者运行时的选择。 6. **使用`ApplicationContextAware`接口** 实现`ApplicationContextAware`接口,可以获取到`ApplicationContext`的引用,然后通过它获取Bean。 ```java public ...
以上就是关于Spring与Hibernate集成的关键知识点,包括基本配置、HibernateDaoSupport与UserDaoHibernateImpl的区别,以及Spring+Struts+Hibernate集成的具体实现细节。这些内容有助于更好地理解和运用Spring框架与...
Spring框架是Java开发中不可或缺的...通过这些笔记,开发者可以获得Spring框架的全面理解,并能熟练地将其与其他技术结合,构建高效且灵活的应用程序。学习和掌握这些内容将极大地提升Java开发者的技能和项目管理能力。
在Spring中,Advice可以是Before、AfterReturning、AfterThrowing以及MethodBeforeAdvice等接口的实现,它们分别代表在方法调用前、正常返回后、抛出异常后和方法调用前执行的额外行为。 2. **Pointcut**:切点,...
5. **服务层(Service Layer)**:在Spring框架中,我们创建服务接口和服务实现类。服务类将调用DAO层的方法,同时处理业务逻辑和异常。通过Spring的@Autowired注解,我们可以注入DAO实例,实现依赖注入。 6. **...
Spring AOP(面向切面编程)是另一个关键特性,它允许开发者定义横切关注点,如日志记录、事务管理等,这些关注点可以跨多个类和方法应用。4.2.4版本的AOP支持更广泛的切面定义,包括基于注解的切面,使得代码更整洁...
- 通过继承`spring-boot-starter-parent`父项目,可以获得统一的版本管理和依赖管理。 - 导入`spring-boot-dependencies`作为依赖管理,简化项目构建配置。 7. **Spring Boot运行方式** - 打包成JAR/WAR运行,可...
5. **Action类**:Action类需要实现Spring的`org.springframework.beans.factory.BeanNameAware`接口,以便在初始化时获取Bean的名字。此外,Action类无需包含构造函数,因为其实例化工作将由Spring完成。 6. **...