spring原理

Java 技术

穿精又带淫゛_ 提交于 2020-04-08 06:25:33
Java 基础/高级 前端 : html css js   前端框架 : JQuery , EasyUI , BootStrap , AngularJS   前端插件 : zTree .. 数据库 : mysql , oracle , redis 缓存数据库 服务器 : tomcat , ElasticSearch 搜索服务器 , Java操作数据库 : JDBC , DBUtils , 数据库连接池 ( DBCP/C3P0 ) JavaWeb 原生开发 :   Servlet : request , response , cookie , session , serlvetContext ..   JSP : JSTL , EL   监听器 , 过滤器 ( 就是两个java类 ) 框架开发 :   SSH : spring , struts2 , hibernate   SSM : spring , springMVC , Mybatis   SpringBoot Xml文件配置 , 注解配置 技术 : Ajax , Json , WebService 框架/工具 :   Apache 系列 :     ActiveMQ     shiro     POI     CXF   Spring Data 系列 :     Spring Data JPA     Spring Data

springmvc和activemq的整合使用

风流意气都作罢 提交于 2020-03-27 04:53:02
1、简介:ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。 2、建议在使用以前了解一下jms的一些知识 3、第一步:我们部署相关的activemq(我这里是采用自己本地linux虚拟机来实现的,以模拟中间推送消息的原理)   activemq下载地址: http://archive.apache.org/dist/activemq/ 我用的是目前最新的5.14.5版本 这里有这个zip的是windows用的,tar.gz的是Linux用的。我这里采用的Linux部署 将activemq的tar解压启动 启动方式在: /root/apache-activemq-5.14.5/bin/linux-x86-64 启动:./activemq start 暂停: ./activemq stop 重启:./activemq restart 启动起来后,访问地址为:http://192.168.5.10:8161/admin 账号密码:都是admin(默认) 开机自启:vi /etc/rc.local 然后在末尾加入 su - root -c '/usr/local

Spring IOC-DI

大城市里の小女人 提交于 2020-03-26 23:38:35
3 月,跳不动了?>>> 1、循环依赖注入问题 Singleton类型的作用域,可以在早期对象缓存集合中或者查询是否存在正在创建中的bean来解决循环依赖注入问题。 private final Map<String,Object> earlySingletonObjects = new HashMap<String,Object>(16); 2、IOC容器的工作模式,通过工厂模式根据beanName通过反射动态生成对象。 1)IOC容器主要完成对象的创建和依赖的管理注入等。 2)依赖注入是控制反转的基础。 3)利用反射原理将对象创建的权利交给了Spring容器,Spring在运行的时候根据配置文件来动态创建对象和维护对象之间的关系,实现了松耦合。 3、依赖注入的实现方式 :构造器、Setter方法注入、接口注入(常用,@Autowired,@Resource) 由Spring容器将对象注入到使用它的地方,被注入的对象只提供对应的方法接收就行,由容器来决定对象之间的依赖关系。 4、@Autowired原理 1)每个Bean实例化之后,调用AutowiredAnnotationBeanPostProcessor的下图方法,找到有@Autowired注解的信息。 检查beanName在injectionMetadataCache的Map中是否有对应的元数据

Spring的两种动态代理:Jdk和Cglib 的区别和实现

让人想犯罪 __ 提交于 2020-03-25 20:43:46
https://www.cnblogs.com/leifei/p/8263448.html 一、原理区别: java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。 而cglib动态代理是利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。 1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP 2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP 3、如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换 如何强制使用CGLIB实现AOP? (1)添加CGLIB库,SPRING_HOME/cglib/*.jar (2)在spring配置文件中加入<aop:aspectj-autoproxy proxy-target-class="true"/> JDK动态代理和CGLIB字节码生成的区别? (1)JDK动态代理只能对实现了接口的类生成代理,而不能针对类 (2)CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法 因为是继承,所以该类或方法最好不要声明成final 二、代码实现 用户管理接口 package com.lf.shejimoshi.proxy.entity; //用户管理接口

ssh2 三大框架整合

无人久伴 提交于 2020-03-23 12:01:18
提示:eclipse环境、工程环境、tomcat环境的jdk保持一致 1、新建一个工程,把工程的编码为utf-8 2、把jsp的编码形式改成utf-8 3、把jar包放入到lib下 (eclipse下jar包要放在lib下,不能在lib下还有文件夹) 4、建立三个src folder src 存放源代码 config 存放配置文件 hibernate 存放hibernate的配置文件 spring 存放spring的配置文件 struts 存放struts的配置文件 struts.xml test 存放单元测试 5、在src下建立包 cn.itcast.s2sh.domain 持久化类和映射文件 6、编写dao层和service层 7、写spring的配置文件 1、写sessionFactory 2、测试 3、写dao和service 4、测试 8、写action 9、写spring的配置文件 把action注入到spring容器中 <bean id="personAction" class="cn.itcast.s2sh.struts2.action.sh.PersonAction" scope="prototype"> scope为"prototype"保证了action的多实例 10、在web.xml 加入spring的监听器 加入struts2的过滤器 11、请求

spring属性赋值和自动装配

孤者浪人 提交于 2020-03-23 08:57:42
一 @Value赋值和@propertySource加载外部配置文件 1、@Value 一般用在属性和setter方法上,当该类注册成bean时,会自动为其属性或方法的参数赋值。 注意:一定不能用在静态方法上,否则会失效 2、用法:   @Value("placeholder") //赋予指定值   @Value("${placeholder}") //赋予配置文件中指定key为placeholder的值 3、@PropertySource("classpath:application.properties")  //导入指定的配置文件, 一般写在主配置类上 4、示例: public class Desk{ private String name; @Value("1") private int hight; private String owner; public Desk() { } public Desk(String name) { this.name = name; } public String getName() { return name; } @Value("${name}") public void setName(String name) {this.name = name; } public int getHight() { return hight; }

Struts1.X与Spring集成——另外一种方案

不打扰是莪最后的温柔 提交于 2020-03-20 03:58:35
版权声明:本文为博主原创文章。未经博主同意不得转载。 https://blog.csdn.net/hanxuemin12345/article/details/38070063 上篇博客介绍了 Struts 1.X 与 Spring 集成的一种方案。 Struts1.X与Spring集成——第一种方案 此篇博客还以上篇博客的登录样例为例,介绍 Struts 1.X 与 Spring 集成的还有一种方案。 1,第一种方案 原理 回顾 第一种方案 集成原理:在 Action 中取得 BeanFactory, 通过 BeanFactory 取得业务逻辑对象 此种方案的缺点: 从严格意义的分层上来看, Action 上看到了 Spring 的相关东西。依赖 Spring API 去查找东西。发生了依赖查找。由于要查找依赖对象,所以要依赖 Spring 服务才干找到,由于在 Spring 提供的工厂里。 应该是 Action 中看不到 Spring 相关东西。 Action 中看到的就是业务接口,这种话层次更加分明。 2。另外一种方案 原理 基于第一种方案的缺点 。我们改成不在去查找业务对象。让 IOC 注入进来,仅仅要提供 setter 方法,就能把对象主动传过来——依赖注入(局限性:在同一个 JVM 里能够,跨 JVM 不能够依赖注入) 假设想被 Spring 注入, Action

论Spring中循环依赖的正确性与Bean注入的顺序关系

丶灬走出姿态 提交于 2020-03-18 12:24:00
某厂面试归来,发现自己落伍了!>>> 一、前言 最近在做项目时候遇到一个奇葩问题,就是bean依赖注入的正确性与bean直接注入的顺序有关系,但是正常情况下明明是和顺序没关系的啊,究竟啥情况那,不急,让我一一道来。 二、普通Bean循环依赖-与注入顺序无关 2.1 循环依赖例子与原理 public class BeanA { private BeanB beanB; public BeanB getBeanB() { return beanB; } public void setBeanB(BeanB beanB) { this.beanB = beanB; } } public class BeanB { private BeanA beanA; public BeanA getBeanA() { return beanA; } public void setBeanA(BeanA beanA) { this.beanA = beanA; } } <bean id="beanA" class="com.alibaba.test.circle.BeanA"> <property name="beanB"> <ref bean="beanB" /> </property> </bean> <bean id="beanB" class="com.alibaba.test.circle

Hibernate Spring

核能气质少年 提交于 2020-03-17 23:00:48
原理: 1. 读取并解析配置文件 2. 读取并解析映射信息,创建SessionFactory 3. 打开Sesssion 4. 创建事务Transation 5. 持久化操作 6. 提交事务 7. 关闭Session 8. 关闭SesstionFactory 为什么要用: 1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。 2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作 3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。 4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。 2. Hibernate是如何延迟加载? 1. Hibernate2延迟加载实现:a)实体对象 b)集合(Collection) 2. Hibernate3 提供了属性的延迟加载功能 当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。 3. Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系) 类与类之间的关系主要体现在表与表之间的关系进行操作

Spring Boot 异步请求和异步调用

此生再无相见时 提交于 2020-03-17 15:31:08
本人免费整理了Java高级资料,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并发分布式等教程,一共30G,需要自己领取。 传送门: https://mp.weixin.qq.com/s/osB-BOl6W-ZLTSttTkqMPQ 一、Spring Boot中异步请求的使用 1、异步请求与同步请求 特点: 可以先释放容器分配给请求的线程与相关资源,减轻系统负担,释放了容器所分配线程的请求,其响应将被延后,可以在耗时处理完成(例如长时间的运算)时再对客户端进行响应。 一句话:增加了服务器对客户端请求的吞吐量(实际生产上我们用的比较少,如果并发请求量很大的情况下,我们会通过nginx把请求负载到集群服务的各个节点上来分摊请求压力,当然还可以通过消息队列来做请求的缓冲)。 2、异步请求的实现 方式一:Servlet方式实现异步请求 @RequestMapping(value = "/email/servletReq", method = GET) public void servletReq (HttpServletRequest request, HttpServletResponse response) { AsyncContext asyncContext = request.startAsync(); /