很多新来的同事不了解我们的项目架构 准备补充一下我们的项目架构 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相关推荐

  1. ssh(Struts+spring+Hibernate)三大框架整合-简述

    ssh(Struts+spring+Hibernate)三大框架配合使用来开发项目,是目前javaee最流行的开发方式,必须掌握: 注意: 为了稳健起见,每加入一个框架,我们就需要测试一下,必须通过才 ...

  2. Workbench Could not connect the SSH Tunnel Authentication error

    1. 问题现象 平日正常使用的 Workbench 在重启电脑之后发现无法连接到对应的数据库,workbench log显示 SSH tunnel]: Authentication error ope ...

  3. debian 10 ssh简单配置

    需求: 安装SSH 仅允许client客户端进行ssh访问,其余所有主机的请求都应该拒绝 配置client只能在Chinaskill20用户环境下可以免秘钥登录,端口号为2222,并且拥有root控制 ...

  4. Linux系统管理必备知识之利用ssh传输文件

    在使用SSH时候,有时我们需要传输文件,这就需要用到命令scp. 从服务器上下载文件 scp username@servername:/path/filename /local_dir(本地目录) e ...

  5. DCN-2655 ssh 远程登陆配置

    DCN-2655 ssh 远程登陆配置: 命名路由器: 在全局模式配置AAA认证列表: 配置登录地址: 配置虚拟端口认证: 配置sshd服务: 命名路由器: Router>enable Rout ...

  6. DCN-s4600 ssh服务登录配置:

    DCN-s4600 ssh服务登录配置: 命名交换机和配置交换机远程登录账号与密码: 配置vlan1IP地址: 将et1/0/1端口加入vlan1: 开启交换机远程登录认证方式: 配置交换机全局模式多 ...

  7. git生成ssh keys步骤与使用

    1 首先你需要查看下本地电脑是否已经生成的有 window 电脑如果没有下载git 可以使用 win+r 弹出提示命令 输入powershell 然后输入 cat ~/.ssh/id_rsa.pub ...

  8. Git 的简单使用及ssh配置问题-赖大大

    软件安装 第一步当然是安装啦. 官方网址:https://git-scm.com/ 具体操作 在你本地电脑的文件夹里右击鼠标,选Git base here 显然,你是在本地仓库的master分支上,通 ...

  9. 安卓下使用 dropbear 开启SSH And arm 下的busybox

    安卓系统 4.2.2  硬件是荣耀立方 只对电视盒子部分进行了操作,没有修改路由部分 先安装<超级终端><RE文件管理器>(华为的应用市场里有),安装 <360超级roo ...

  10. Linux踢出其他正在SSH登陆用户

    在一些生产平台或者做安全审计的时候往往看到一大堆的用户SSH连接到同一台服务器,或者连接后没有正常关闭进程还驻留在系统内.限制SSH连接数与手动断开空闲连接也有必要之举,这里写出手动剔出其他用户的过程 ...

最新文章

  1. php 图片在线编辑功能,summernote在线编辑器提交的内容PHP处理其中图片函数
  2. mfschunkserver安装脚本
  3. 版本更新带来的缓存问题_浏览器缓存原理总结
  4. 计算机显示桌面的按钮,显示桌面按钮不见了怎么办_显示桌面按钮不见了
  5. springboot扫描组件_SpringBoot入口类和@SpringBootApplication详解
  6. Instagram为何如此受欢迎?
  7. 解决Cannot change version of project facet Dynamic Web M
  8. 《DBNotes: Buffer Pool对于缓冲页的链表式管理》
  9. LeetCode 41. 缺失的第一个正数
  10. AJAX 信息查询管理
  11. QTP报错“缺少对象WScript”
  12. 13个DNS 根服务器
  13. ASP.NET【1】
  14. centos7 源码安装redis
  15. Linux软件安装的几种方式
  16. 2022-08-19 mysql/stonedb-索引优化专利交底书-改进点
  17. python27安装get-pip
  18. 第二章-数据描述(初级统计)
  19. oracle显示人民币,如何在ORACLE中实现人民币大写的转换
  20. 你见过几次四大天王同台啊

热门文章

  1. 单元测试JUnit 4 (一)——keeps the bar green to keeps the code clean
  2. PDF 补丁丁 0.4.1.688 测试版发布(请务必用其替换 682 测试版)
  3. Spark 系列(一)—— Spark 简介
  4. collection集合 介绍_五分钟了解MongoDB介绍,安装与使用
  5. Linux Signal及Golang中的信号处理
  6. Go语言并发爬虫,爬取空姐网所有相册图片
  7. python爬虫05--添加header
  8. 在线HTML编辑器 KindEditor
  9. 【MyBatis框架】高级映射-多对多查询
  10. jsp java乱码转换_JSP中文乱码问题《转》