SSH ALL-IN-ONE
很多新来的同事不了解我们的项目架构 准备补充一下我们的项目架构 Spring-Hibernate Based.
主要涉及到一下几个方面
Queue-based event processing
Producer: IDBSync
Consumer: EAI
for producer:
shell, bash, cron job,
for consumer:
hibernate to persistent
spring to glue business and others together, such as transaction,exception,Schedule,Mail,Webservice,apache cxf integration...
Others
Hudson, maven, profile for test,dev,stage,production...
Spring (IOC, DI)
container--factory--bean
<beans> <bean id="triangle" class="a.b.c.Triangle" /> </beans>
getbean from XmlBeanFactory
BeanFactory factory= new XmlBeanFactory(new FileSystemResource("spring.xml")); Triangle triangle = (Triangle)factory.getBean("triangle");
application context
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); Triangle triangle =(Triangle)context.getBean("triangle");
Bean with property
<beans><bean id="triangle" class="a.b.c.Triangle" ><property name="type" value="Equlateral"/></bean> </beans>
Constructor injection
<beans><bean id="triangle" class="a.b.c.Triangle" ><constructor-arg type="java.lang.String" index="0" value="Equlateral"/><constructor-arg index="1" value="20" /></bean> </beans>
injection object
<beans><bean id="triangle" class="a.b.c.Triangle" ><property name="pointA" ref="aPoint"></bean><bean id="aPoint" class="a.b.c.Point" ><property name="x" value="20"><property name="y" value="120"></bean> </beans>
inner bean, aliases,idref
<beans><bean id="triangle" class="a.b.c.Triangle" name="triangle-name"><property name="pointA" ref="aPoint"><property name="pointC">< idref="Point0"/></property><property name="pointB"> <bean id="point2" class="a.b.c.Point" ><property name="x" value="19"><property name="y" value="12"></bean></property></bean><bean id="aPoint" class="a.b.c.Point" ><property name="x" value="20"><property name="y" value="120"></bean><bean id="Point0" class="a.b.c.Point" ><property name="x" value="0"><property name="y" value="0"></bean> <alias name="triangle" alias="triangle-alias" /> </beans>
Collections
<beans><bean id="triangle" class="a.b.c.Triangle" ><property name="points" ><list><ref bean="aPoint"><ref bean="bPoint"></list></property></bean><bean id="aPoint" class="a.b.c.Point" ><property name="x" value="20"><property name="y" value="120"></bean><bean id="bPoint" class="a.b.c.Point" ><property name="x" value="120"><property name="y" value="1120"></bean> </beans>
autowiring=byName,byType,constructor
<beans><bean id="triangle" class="a.b.c.Triangle" autowire="byName"></bean><bean id="aPoint" class="a.b.c.Point" ><property name="x" value="20"><property name="y" value="120"></bean><bean id="bPoint" class="a.b.c.Point" ><property name="x" value="120"><property name="y" value="1120"></bean> </beans>
Spring Bean Scope
- singleton - Only once per Spring container(default)
- prototype - new bean created with every request or reference
Web-aware context bean scope
- request - new bean per servlet request
- session - new bean per session
- global session - new bean per global http session(portlet context)
<beans><bean id="bPoint" class="a.b.c.Point" scope="prototype"><property name="x" value="120"><property name="y" value="1120"></bean> </beans>
Using applicationContextAware
public class Triangle implements ApplicationContextAware, BeanNameAware{private ApplicationContext context=null;@override public void setApplicationContext(ApplicationContext context) throws BeansException{this.context = context; }@override public void setBeanName(String beanName){System.out.println("bean name is: " +beanName); } }
Lifecycle Callbacks
public class Triangle implements InitializingBean, DisposableBean{@Override public void afterPropertiesSet() throws Exception{ } @Override public void destory() throws Exception{ } public void myInit(){ } public void myclean(){ } }
customize init-method and destory-method
<beans><bean id="bPoint" class="a.b.c.Point" init-method="myInit" destory-method="myclean"><property name="x" value="120"><property name="y" value="1120"></bean> </beans>
BeanPostProcessor
public class XXX implements BeanPostProcessor{@Override public Object postProcessAfterInitialization(object bean,String beanName) throws BeansException{return bean; } @Override public Object postProcessBeforeInitialization(object bean,String beanName) throws BeansException{return bean; } }
Coding to interface
Annotation
Using MessageSource to get text from property files
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="basenames"><list><value>mymessages</value></list> </property> </bean>
mymessages.propeties
and in java
ApplicationContext context ;context.getMessage("key",null,"default value");
Event handing
ApplicationEventPublisher.publishEvent() + ApplicationEvent + ApplicationListener
built-in event:
- ContextRefreshedEvent
- ContextClosedEvent
- RequestHandleEvent : web app related, for DispatcherServlet
Load ApplicationContext in web application
ContextLoaderListerner in web.xml
<context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/applicationContext.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>
or ContextLoaderServlet to, but prefer ContextLoaderListener
with Hibernate, Spring as a Container injects all hibernate's dependencies automatically.
SessionFactory+datasource+transactionManager
org.springframework.orm.hibernate3.LocalSessionFactoryBean
org.springframework.orm.hibernate3.HibernateTransactionManager
AOP
import org.aspectj.lang.annotation.Aspect;@Aspect public class LoggingAspect{@Before("execution(public String getName())") public void loggingAdvice(){ System.out.println("Advice run, getName method called."); } }
config
<beans> <aop:aspectj-autoproxy /> <bean name=''loggingAspect" class="a.b.c.LoggingAspect"/> </beans>
or define a pointcut
@Aspect public class LoggingAspect{@Before("allGetters()") public void loggingAdvice(){ System.out.println("Advice run, get* method called."); }@Pointcut("execution(* get*())") public void allGetters(){} }
Around pointcut
@Around("allGetters()") public Object myAroundAdvice(ProceedingJoinPoint joinPoint){ Object returnValue = null; try{System.out.println("Before advice");returnValue = joinPoint.proceed();System.out.println("After Returning"); }catch(Throwable e){System.out.println("After Throwing"); } System.out.println("After Finally"); return returnValue; }
转载于:https://www.cnblogs.com/grep/archive/2012/04/26/2471237.html
SSH ALL-IN-ONE相关推荐
- ssh(Struts+spring+Hibernate)三大框架整合-简述
ssh(Struts+spring+Hibernate)三大框架配合使用来开发项目,是目前javaee最流行的开发方式,必须掌握: 注意: 为了稳健起见,每加入一个框架,我们就需要测试一下,必须通过才 ...
- Workbench Could not connect the SSH Tunnel Authentication error
1. 问题现象 平日正常使用的 Workbench 在重启电脑之后发现无法连接到对应的数据库,workbench log显示 SSH tunnel]: Authentication error ope ...
- debian 10 ssh简单配置
需求: 安装SSH 仅允许client客户端进行ssh访问,其余所有主机的请求都应该拒绝 配置client只能在Chinaskill20用户环境下可以免秘钥登录,端口号为2222,并且拥有root控制 ...
- Linux系统管理必备知识之利用ssh传输文件
在使用SSH时候,有时我们需要传输文件,这就需要用到命令scp. 从服务器上下载文件 scp username@servername:/path/filename /local_dir(本地目录) e ...
- DCN-2655 ssh 远程登陆配置
DCN-2655 ssh 远程登陆配置: 命名路由器: 在全局模式配置AAA认证列表: 配置登录地址: 配置虚拟端口认证: 配置sshd服务: 命名路由器: Router>enable Rout ...
- DCN-s4600 ssh服务登录配置:
DCN-s4600 ssh服务登录配置: 命名交换机和配置交换机远程登录账号与密码: 配置vlan1IP地址: 将et1/0/1端口加入vlan1: 开启交换机远程登录认证方式: 配置交换机全局模式多 ...
- git生成ssh keys步骤与使用
1 首先你需要查看下本地电脑是否已经生成的有 window 电脑如果没有下载git 可以使用 win+r 弹出提示命令 输入powershell 然后输入 cat ~/.ssh/id_rsa.pub ...
- Git 的简单使用及ssh配置问题-赖大大
软件安装 第一步当然是安装啦. 官方网址:https://git-scm.com/ 具体操作 在你本地电脑的文件夹里右击鼠标,选Git base here 显然,你是在本地仓库的master分支上,通 ...
- 安卓下使用 dropbear 开启SSH And arm 下的busybox
安卓系统 4.2.2 硬件是荣耀立方 只对电视盒子部分进行了操作,没有修改路由部分 先安装<超级终端><RE文件管理器>(华为的应用市场里有),安装 <360超级roo ...
- Linux踢出其他正在SSH登陆用户
在一些生产平台或者做安全审计的时候往往看到一大堆的用户SSH连接到同一台服务器,或者连接后没有正常关闭进程还驻留在系统内.限制SSH连接数与手动断开空闲连接也有必要之举,这里写出手动剔出其他用户的过程 ...
最新文章
- php 图片在线编辑功能,summernote在线编辑器提交的内容PHP处理其中图片函数
- mfschunkserver安装脚本
- 版本更新带来的缓存问题_浏览器缓存原理总结
- 计算机显示桌面的按钮,显示桌面按钮不见了怎么办_显示桌面按钮不见了
- springboot扫描组件_SpringBoot入口类和@SpringBootApplication详解
- Instagram为何如此受欢迎?
- 解决Cannot change version of project facet Dynamic Web M
- 《DBNotes: Buffer Pool对于缓冲页的链表式管理》
- LeetCode 41. 缺失的第一个正数
- AJAX 信息查询管理
- QTP报错“缺少对象WScript”
- 13个DNS 根服务器
- ASP.NET【1】
- centos7 源码安装redis
- Linux软件安装的几种方式
- 2022-08-19 mysql/stonedb-索引优化专利交底书-改进点
- python27安装get-pip
- 第二章-数据描述(初级统计)
- oracle显示人民币,如何在ORACLE中实现人民币大写的转换
- 你见过几次四大天王同台啊
热门文章
- 单元测试JUnit 4 (一)——keeps the bar green to keeps the code clean
- PDF 补丁丁 0.4.1.688 测试版发布(请务必用其替换 682 测试版)
- Spark 系列(一)—— Spark 简介
- collection集合 介绍_五分钟了解MongoDB介绍,安装与使用
- Linux Signal及Golang中的信号处理
- Go语言并发爬虫,爬取空姐网所有相册图片
- python爬虫05--添加header
- 在线HTML编辑器 KindEditor
- 【MyBatis框架】高级映射-多对多查询
- jsp java乱码转换_JSP中文乱码问题《转》