Upload
bryant-yu
View
252
Download
0
Embed Size (px)
Citation preview
8/4/2019 spring2.5
1/46
Spring SSH ---wjt276
[2010-05-14]
8/4/2019 spring2.5
2/46
spring2.5 2 46
............................................................................................................................................. 2
.................................................................................................................... 4
Jdom ............................................................................................................... 4
Spring ............................................................................................................... 5
sping ....................................................................................................... 8
.................................................................................................................... 8
spring ............................................................................................................ 8
spring jar ................................................................................................................ 8
.............................................................................................................................. 8
.................................................................................................................... 8
IOC(DI)............................................................................................................ 9
IOCDI....................................................................................................................... 9
xml ...................................................................................................... 9(Injecting dependencies) ......................................................................................... 9
setter Setter Injection ..................................................................................... 10
Constructor Injection ...................................................................................... 10
idname ............................................................................................................................ 11
..................................................................................................................... 12
Bean scope ......................................................................................................... 12
............................................................................................................................... 12
autowire ................................................................................................................ 13
byName ........................................................................................................................ 13
byType .......................................................................................................................... 15
............................................................................................................................... 15
............................................................................................................................... 15
lazy-init/default-lazy-init ............................................................................................... 15
init-method destroy-method prototype ....................................... 15
annotation Spring .................................................................................................. 16
annotation Spring ........................................................................................... 16
@Autowired@Qualifier .................................................................................................... 16
@Autowired .................................................................................................................. 16
@Qualifier .................................................................................................................... 17@Resource() ....................................................................................................... 17
JSR-250 ......................................................................................................................... 17
@Resource ................................................................................................................... 18
@Componet ........................................................................................................................ 18
@Scope@PostConstruct@PreDestroy .......................................................................... 19
jar ................................................................................................................... 19
AOP() ......................................................................................................... 20
AOP .............................................................................................................................. 20
............................................................................................... 20
Spring AOP ...................................................................................................... 22
AOP annotation ..................................................................................................... 22
annotation ............................................................................................... 22
aspectJ ................................................................................................................... 22
8/4/2019 spring2.5
3/46
spring2.5 3 46
AOP annotation .................................................................................................. 22
AspectJ ......................................................................................................... 23
..................................................................................................................... 23
Advice .......................................................................................................................... 24
Pointcut ........................................................................................................................ 26
annotatin AOP ............................................................................................. 26
AOP
xml
................................................................................................................ 27AOP ........................................................................................................... 28
DataSource ................................................................................................................... 28
Sping ............................................................................................................... 28
............................................................................................................................... 29
dbcp.BasicDataSource ........................................................................................................ 29
Spring Hiberante3 .................................................................................................... 30
Spring hibernate3 SessionFactory ............................................................................ 30
xml SessionFactory ............................................................................................. 30
annotation SessionFactory ........................................................................... 30
hibernate jar ............................................................................................. 31 jar .......................................................................................................................... 31
annotation jar .......................................................................................... 31
DDL jar ........................................................................... 31
Spring hibernate3 ................................................................................................. 31
Annotation ................................................................................... 32
Spring ............................................................................................................. 36
XML Spring .................................................................................. 37
HibernateTemplate ............................................................................................................. 38
HibernateTemplate ....................................................................................................... 38
HibernateDaoSupport .................................................................................................. 39
Spring -SSH ......................................................................................................... 40
jar ( jar ) ..................................................................................... 41
Spring + Hibernate .................................................................................. 41
Struts2 ...................................................................................................... 41
struts .................................................................................................................. 43
DTOVO ................................................................................................................... 43
DTO ..................................................................................................................................... 43
VO ....................................................................................................................................... 43
SSH ..................................................................................................... 43Jsp Session Session ............................................................................... 43
openSessionView......................................................................... 44
..................................................................................................................... 44
SSH jar ......................................................................................................... 45
Struts2 ................................................................................................................................ 45
Hibernate3.3.2 .................................................................................................................... 45
Spring ................................................................................................................................. 46
8/4/2019 spring2.5
4/46
spring2.5 4 46
Userpublicclass User {
private String username;
private String password;
public String getUsername() { returnusername; }
publicvoidsetUsername(String username) {this.username = username;}
public String getPassword() {returnpassword; }
publicvoidsetPassword(String password) {
this.password = password;
}}
UserDao
publicinterface UserDao {
publicvoidsave(User u);
}
UserDao UserDaoImpl
publicclass UserDaoImpl implements UserDao {
@Override
publicvoidsave(User u) {
System.out.println("user save...");
}}
User
publicclass UserService {
//newnew
private UserDao userDao = new UserDaoImpl();
public UserDao getUserDao() {returnuserDao;}
publicvoidsetUserDao(UserDao userDao) { this.userDao = userDao; }
publicvoidadd(User u){
userDao.save(u);}//UserDaosave
}
Jdom test.xml
8G
8/4/2019 spring2.5
5/46
spring2.5 5 46
200
1580
10G
500
3000
publicclass Sample1 {
publicstaticvoidmain(String[] args) throws Exception{
SAXBuilder sb=new SAXBuilder();//SAXBuilder
Document doc=
sb.build(Sample1.class.getClassLoader().getResourceAsStream( "test.xml"));
//
Element root=doc.getRootElement(); //
List list=root.getChildren("disk");//disk
for(int i=0;i
8/4/2019 spring2.5
6/46
spring2.5 6 46
private Map beans = new HashMap();
public ClassPathXmlApplicationContext() throws Exception{
SAXBuilder sb=new SAXBuilder();//SAXBuilder
Document
doc=sb.build(ClassPathXmlApplicationContext.class.getClassLoader().getResourceAsStream("b
eans.xml")); //
Element root=doc.getRootElement(); // //System.out.println(root.getName());
List list=root.getChildren("bean");//disk
for(int i=0;i
8/4/2019 spring2.5
7/46
spring2.5 7 46
String clazz = element.getAttributeValue("class");
System.out.println(id + ":" + clazz);
Object o = Class.forName(clazz).newInstance();
beans.put(id, o);
//* forspring()
//beanproperty for (Element propertyElement : (List)element.getChildren("property")){
//property name()
String name = propertyElement.getAttributeValue("name");
//property bean (),beanbean
ID
String bean = propertyElement.getAttributeValue("bean");
//IDbean
Object beanObject = beans.get(bean);
//setset + +
String methodName = "set" + name.substring(0,1).toUpperCase() +
name.substring(1);
System.out.println("methodName = " + methodName);
//beanset()
Method m = o.getClass().getMethod(methodName,
beanObject.getClass().getInterfaces()[0]);
//method
m.invoke(o, beanObject);
}
}
}
public Object getBean(String name){
returnbeans.get(name);
}
}
()
2
publicvoidtestAdd_3() throws Exception {
BeanFactory factory = new ClassPathXmlApplicationContext();
UserService service = (UserService)factory.getBean("userService");
//
//UserDao userDao = (UserDao)factory.getBean("u");
//service.setUserDao(userDao);
User u = new User();
service.add(u);
}
BeanFactory
publicinterface BeanFactory {
8/4/2019 spring2.5
8/46
spring2.5 8 46
public Object getBean(String name);
}
sping
a)
b) bean
spring
spring
spring jar
User Library
spring spring.jar commons-logging.jar
publicvoidtestAdd_3() throws Exception {
BeanFactory factory = new ClassPathXmlApplicationContext( "beans.xml");
UserService service = (UserService)factory.getBean("userService");
User u = new User();
service.add(u);
}
ClassPathXmlApplicationContextBeanFactoryspring
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
ClassPathXmlApplicationContextApplicationContextApplicationContext
BeanFactoryBeanFactoryApplicationContext
8/4/2019 spring2.5
9/46
spring2.5 9 46
1BeanFactory:Beanbean
2ApplicationContextbean(bean
)
publicvoidtestAdd_3() throws Exception {ApplicationContext factory = new
ClassPathXmlApplicationContext( "beans.xml");
UserService service = (UserService)factory.getBean("userService");
User u = new User();
service.add(u);
}
IOC(DI)
IOCDI
IOC:Inversion of Control(UserServiceuserDao)(UserService)(UserService)(Spring)
Spring
springg()
bean
bean()
DI:Dependency Injection (UserServiceuserDao) Spring
.
DIIOC
xml
1 window preferences myeclipse Files and Editing - xml xml catalog
2 add
i. Location:D:\share\0900_Spring\soft\spring-framework-2.5.6\dist\resources\spring-beans-2.5.xsd
ii. URI: file:///D:/share/0900_Spring/soft/spring-framework-2.5.6/dist/resources/spring-
beans-2.5.xsd
iii. Key Type: Schema Location
iv. Key: http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
(Injecting dependencies)
1setter()2()
3 ()
8/4/2019 spring2.5
10/46
spring2.5 10 46
setter Setter Injection
beansetXXX
beansetXXX
publicclass UserService {
private UserDao userDao = new UserDaoImpl();
public UserDao getUserDao() {
returnuserDao;}
publicvoidsetUserDao(UserDao userDao) {
this.userDao = userDao;
}
publicvoidadd(User u){ userDao.save(u);}
}
spring
Constructor Injection
bean
publicclass UserService {
private UserDao userDao = new UserDaoImpl();
public UserService(UserDao userDao) {
super();
this.userDao = userDao;
}
public UserDao getUserDao() {returnuserDao;}
publicvoidsetUserDao(UserDao userDao) { this.userDao = userDao;}
publicvoidadd(User u){ userDao.save(u);}
}
spring
8/4/2019 spring2.5
11/46
spring2.5 11 46
newbean
newbean,
-->
bean
publicclass ExampleBean {
privateintyears;
private String ultimateAnswer;
public ExampleBean(int years, String ultimateAnswer) {
this.years = years;
this.ultimateAnswer = ultimateAnswer;
}
}
1
xml
int 7500000, java.lang.String 42,
2
xml
index=0 index=1
setter
idname
xml
idname
idname
8/4/2019 spring2.5
12/46
spring2.5 12 46
bean
bean
publicclass UserDaoImpl implements UserDao {
privateintdaoId;
private String daoStatus;publicint getDaoId() {returndaoId;}
publicvoidsetDaoId(int daoId) {this.daoId = daoId; }
public String getDaoStatus() { returndaoStatus; }
publicvoidsetDaoStatus(String daoStatus) {this.daoStatus = daoStatus;}
@Override
publicvoidsave(User u) {System.out.println("user save...");}
}
xml
good
value
Bean scope
Springbeanscope
scope
1 singletonbeanbean
2prototypebeanbean
3 request
4 session
5 globalsession
springwebrequest/session/globalsession
scope(strutsscope)
8/4/2019 spring2.5
13/46
spring2.5 13 46
a list element followed by a reference
an entry
just some string
a ref
just some string
autowire
beanbeanspringautowire
autowire
1 autodetect;
2byName:bean
3byTypebean
4 constaractor
5defaultdefault-autowire
6 no(bean)
byNamebean
bean
UserDaoImpl
8/4/2019 spring2.5
14/46
spring2.5 14 46
publicclass UserDaoImpl implements UserDao {
privateintdaoId;
publicint getDaoId() {returndaoId;}
publicvoidsetDaoId(int daoId) {this.daoId = daoId; }
@Override
public String toString(){
return"daoId=" + this.daoId;}}
UserService
publicclass UserService {
private UserDao userDao = new UserDaoImpl();
public UserDao getUserDao() {
returnuserDao;
}
publicvoidsetUserDao(UserDao userDao) {
this.userDao = userDao;
}
publicvoidadd(User u){
userDao.save(u);
}}
spring
publicvoidtestAdd_4() throws Exception {ApplicationContext factory = new
ClassPathXmlApplicationContext( "beans.xml");
UserService service = (UserService)factory.getBean("userService");
System.out.println(service.getUserDao());
}
daoId=1
UserDaoImpl(userDaouserDao2)UserService
userServicebeanautowirebyName
springautowire=byNamebeaniduserService
8/4/2019 spring2.5
15/46
spring2.5 15 46
byType
springuserService
1
2 anntation
3 byType
lazy-init/default-lazy-init
()
bean
lazy-initdefaultdefault-lazy-init
true:contextbean
falsecontextbean
init-method destroy-method prototype
init-methodbean
destroy-method:bean
scpoe=prototype
userService
publicclass UserService {publicvoidinit(){
System.out.println("UserService");
}
8/4/2019 spring2.5
16/46
spring2.5 16 46
private UserDao userDao = new UserDaoImpl();
public UserDao getUserDao() {returnuserDao; }
publicvoidsetUserDao(UserDao userDao) {this.userDao = userDao;}
publicvoidadd(User u){ userDao.save(u);}
publicvoiddestroy(){System.out.println("destory"); }
}
publicvoidtestAdd_4() throws Exception {
ClassPathXmlApplicationContext factory = new
ClassPathXmlApplicationContext( "beans.xml");
UserService service = (UserService)factory.getBean("userService");
System.out.println(service.getUserDao());
//webApplacationContextdestorydestory
//ApplicationContextdestorydestory
factory.destroy();
}
annotation Spring
annotation Spring
spring xml
spring
annotation
1AutowiredAnnotationBeanPostProcessor,
2CommonAnnotationBeanPostProcessor,
3PersistenceAnnotationBeanPostProcessor,
4RequiredAnnotationBeanPostProcessor
@Autowired@Qualifier
xml bean
@Autowired
getter setter setter
( byType )
8/4/2019 spring2.5
17/46
spring2.5 17 46
xmp
userService
publicclass UserService {private UserDao userDao = new UserDaoImpl();
public UserDao getUserDao() {returnuserDao;}
//(byType)
//annotationsetter
@Autowired
publicvoidsetUserDao(UserDao userDao) {
this.userDao = userDao;
}
publicvoidadd(User u){
userDao.save(u);
}}
spring(byType)
@Qualifier
@AutowiredbyTypebeanSpring
beanbean
Springbean@Qualifier, @Qualifiervalue
bean
publicclass UserService {
private UserDao userDao = new UserDaoImpl();
public UserDao getUserDao() {returnuserDao;
}
//(byType)
//bean@Qualifierbean
@Autowired
publicvoidsetUserDao(@Qualifier(value="u") UserDao userDao) {
this.userDao = userDao;
}
publicvoidadd(User u){ userDao.save(u);}
}
@Resource()
xml bean
JSR-250
JCP:Java Community Process J2EE Java
JSR
8/4/2019 spring2.5
18/46
spring2.5 18 46
JSR JSRJSR
@Resource
import javax.annotation.Resource;
publicclass UserService {
private UserDao userDao = new UserDaoImpl();
public UserDao getUserDao() {returnuserDao;
}
//setter(userDao)
//@ResourceJ2EE(import javax.annotation.Resource)
@Resource
publicvoidsetUserDao(UserDao userDao) {
this.userDao = userDao;
}
publicvoidadd(User u){userDao.save(u);}
}
setter(userDao)
@ResourceJ2EE(import javax.annotation.Resource)
@ResourcebyNamebyTypebeanname
@Resource(name="u2")
publicvoidsetUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Resource@Autowired
annotation xml
@Componet
@Autowired@Resource xml bean annotation
@Component bean bean
@Componet xml bean
@ComponetSpring(org.springframework.stereotype.Component;)
bean @Componet@Service@Repository@Controller bean
import javax.annotation.Resource;
import org.springframework.stereotype.Component;
// @Componetbean
// valuebean
@Component(value="userService")
8/4/2019 spring2.5
19/46
spring2.5 19 46
publicclass UserService {
private UserDao userDao = new UserDaoImpl();
public UserDao getUserDao() {returnuserDao;}
//setter(userDao)
//@ResourceJ2EE(import javax.annotation.Resource)
@Resource
publicvoidsetUserDao(UserDao userDao) {this.userDao = userDao;}publicvoidadd(User u){userDao.save(u);}}
@Componetbeanvaluebeanannotation
value
@Componet
Spring
base-package @Componet
Springbean
@Scope@PostConstruct@PreDestroy
@Scopexmlscope
@PostConstructxmlinit-method
@PreDestroyxmldestroy-method
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;
import org.springframework.context.annotation.Scope;import org.springframework.stereotype.Component;
@Component(value="userService")
@Scope("singleton")
publicclass UserService {
@PostConstruct
publicvoidinit(){System.out.println("UserService");}
private UserDao userDao = new UserDaoImpl();
public UserDao getUserDao() {returnuserDao;}
@Resource
publicvoidsetUserDao(UserDao userDao) {this.userDao = userDao;}
publicvoidadd(User u){ userDao.save(u);}
@PreDestroy
publicvoiddestroy(){System.out.println("destory"); }
jar
1@Autowired org.springframework.beans.factory.annotation.Autowired;
2@Qualifier org.springframework.beans.factory.annotation.Qualifier;3@Componet org.springframework.stereotype.Component;
4@Resource javax.annotation.Resource;
5@Scope org.springframework.context.annotation.Scope;
8/4/2019 spring2.5
20/46
spring2.5 20 46
7@PreDestroy javax.annotation.PreDestroy;
AOP()
AOP
AOPAspect Oriented Programming()
1
2
3()
UserDao
publicinterface UserDao {
publicvoidsave(User u);
publicvoiddelete(User u);
}
UserDaoImpl(UserDao)
publicclass UserDaoImpl implements UserDao {
@Overridepublicvoidsave(User u) {System.out.println("user save...");}
@Override
publicvoiddelete(User u) {System.out.println("user delete...");}
}
UserService()
publicclass UserService {
private UserDao userDao = new UserDaoImpl();
public UserDao getUserDao() {returnuserDao;}
publicvoidsetUserDao(UserDao userDao) {this.userDao = userDao;}
publicvoidadd(User u){ userDao.save(u);}
publicvoiddelete(User u){userDao.delete(u);}
}
User()
publicclass User {
private String username;
private String password;
public String getUsername() {returnusername; }
publicvoidsetUsername(String username) {this.username = username;}
public String getPassword() {returnpassword; }
publicvoidsetPassword(String password) {this.password = password;}
8/4/2019 spring2.5
21/46
spring2.5 21 46
}
Spring
( InvocationHandler)
InvocationHandler
publicclass LogIntroduction implements InvocationHandler {
private Object tergert;
public LogIntroduction(UserDao userDao) {this.tergert = userDao;}
//feforeMethod
publicvoidbeforeMethod(){System.out.println("beforMethod");}
@Override
public Object invoke(Object arg0, Method m, Object[] arg)
throws Throwable {
this.beforeMethod();
m.invoke(tergert, arg);
returnnull;
}}
publicvoidtestAdd_3() throws Exception {
ClassPathXmlApplicationContext factory = new ClassPathXmlApplicationContext();
UserService service = (UserService)factory.getBean("userService");
UserDao userDao = (UserDao)factory.getBean("u");
LogIntroduction li = new LogIntroduction(userDao);
UserDao userDaoProxy
=(UserDao)Proxy.newProxyInstance(userDao.getClass().getClassLoader(), new Class[]
{UserDao.class}, li);User u = new User();
service.setUserDao(userDaoProxy);
service.add(u);
service.delete(u);}
beforMethod
user save...
beforMethod
user delete...
JAVA
8/4/2019 spring2.5
22/46
spring2.5 22 46
Spring AOP Spring
1 xml
2annotation ( AspectJ )
AOP annotation
annotation
:@AspectJ
Springaopxsd()
aspectJjar
aspectjweaver.jar
aspectjrt.jar
aspectJ
AspectJ (AOP )
AspectJ
Spring
AOP annotation
save()
1 spring
2 modeldaoservice
3 (LogInterceptor)
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
@Aspect
@Component
publicclass LogInterceptor {
@Before("execution(public void
http://www.springframework.org/schema/aop/spring-aop-2.5.xsdhttp://www.springframework.org/schema/aop/spring-aop-2.5.xsd8/4/2019 spring2.5
23/46
spring2.5 23 46
com.wjt276.dao.impl.UserDaoImpl.save(com.wjt276.model.User))" )
publicvoidbefore(){
System.out.println("method start...");
}
}
public void
com.wjt276.dao.impl.UserDaoImpl.save(com.wjt276.model.User)
1@Aspect
2@ComponetSpring
Spring
3@Befoe(Advice)
4execution:
AspectJ
1JoinPoint
()
2PointCut
@Pointcut("execution(* com.xyz.someapp.service.*.*(..))")
public void businessService() {}
3Aspect
4Advice
@Before
5Target
6Weave
1 com.wjt276.dao.impl.UserDaoImpl.save User
execution(public void com.wjt276.dao.impl.UserDaoImpl.save(com.wjt276.model.User))
2
execution(public * *(..))
3 set
( )
8/4/2019 spring2.5
24/46
spring2.5 24 46
execution(* set*(..))
4 com.xyz.service.AccountService
execution(* com.xyz.service.AccountService.*(..))
5 com.xyz.service
execution(* com.xyz.service.*.*(..))
6 com.xyz.service(..)
execution(* com.xyz.service..*.*(..))
7 void !void( void)
execution(public void com.xyz.service..*.*(..))
execution(public !void com.xyz.service..*.*(..))
AspectJSpring AOP,
within(com.xyz.service.*)
within(com.xyz.service..*)
this(com.xyz.service.AccountService)
target(com.xyz.service.AccountService)
args(java.io.Serializable)
@target(org.springframework.transaction.annotation.Transactional)
@within(org.springframework.transaction.annotation.Transactional)
@annotation(org.springframework.transaction.annotation.Transactional)
@args(com.xyz.security.Classified)
bean(tradeService)
bean(*Service)
Advice
@Before
@Aspect
public class BeforeExample {
@Before("com.xyz.myapp.SystemArchitecture.dataAccessOperation()")
8/4/2019 spring2.5
25/46
spring2.5 25 46
public void doAccessCheck() { // ... }}
@Aspect
public class BeforeExample {
@Before("execution(* com.xyz.myapp.dao.*.*(..))")
public void doAccessCheck() { // ... }}
@ AfterReturning
@Aspect
public class AfterReturningExample {
@AfterReturning("com.xyz.myapp.SystemArchitecture.dataAccessOperation()")
public void doAccessCheck() { // ... }}
@Aspect
public class AfterReturningExample {
@AfterReturning(
pointcut="com.xyz.myapp.SystemArchitecture.dataAccessOperation()",
returning="retVal")
public void doAccessCheck(Object retVal) { // ... }}
@ AfterThrowing
@Aspect
public class AfterThrowingExample {@AfterThrowing("com.xyz.myapp.SystemArchitecture.dataAccessOperation()")
public void doRecoveryActions() { // ... }}
@Aspect
public class AfterThrowingExample {
@AfterThrowing(
pointcut="com.xyz.myapp.SystemArchitecture.dataAccessOperation()",
throwing="ex")
public void doRecoveryActions(DataAccessException ex) { // ... }}
@After (finally)
catch( finally )
@Aspect
public class AfterFinallyExample {
@After("com.xyz.myapp.SystemArchitecture.dataAccessOperation()")
public void doReleaseLock() { // ... }}
@ Around
ProceedingJoinPoint Object retVal = pjp.proceed();
return retVal;
8/4/2019 spring2.5
26/46
spring2.5 26 46
@Aspect
public class AroundExample {
@Around("com.xyz.myapp.SystemArchitecture.businessService()")
public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable {
// start stopwatch
Object retVal = pjp.proceed();
// stop stopwatchreturn retVal; }}
Pointcut
Advice
@Aspect
@Component
publicclass LogInterceptor {
@Pointcut("execution(public * com.wjt276.dao..*.*(..))")
publicvoidmyMethod(){};
@Before(value="myMethod()")
publicvoidbefore(){
System.out.println("method start...");
}
@AfterReturning("myMethod()")
publicvoidafterReturning(){
System.out.println("method after returning...");
}}
Pointcut
annotatin AOP
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
@Aspect
@Component
publicclass LogInterceptor {
@Pointcut("execution(public * com.wjt276.dao..*.*(..))")
publicvoidmyMethod(){};
@Before(value="myMethod()")
publicvoidbefore(){
8/4/2019 spring2.5
27/46
spring2.5 27 46
System.out.println("method start...");
}
@AfterReturning("myMethod()")
publicvoidafterReturning(){
System.out.println("method after returning...");
}
@Around(value="myMethod()")
publicvoidaround(ProceedingJoinPoint pjp) throws Throwable{
//@aroundProceedingJoinPoint
System.out.println("method around start...");
//Throwable
pjp.proceed();
System.out.println("method around end...");
}
}
AOP xml
xml
annotation annotation xml
xml
xml annotation
8/4/2019 spring2.5
28/46
spring2.5 28 46
AOP
Spring AOP()
1 Spring JDK
2 Spring CGLIB (
JDK) CGLIB
DataSourceDataSource javax.sql.DataSource
DataSource
Sping
Planceholder()
8/4/2019 spring2.5
29/46
spring2.5 29 46
${jdbc.driverClassName}:jdbc.driverClassName
-->
classpath:jdbc.properties
jdbc.properties
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring
jdbc.username=root
jdbc.password=root
bean (Spring )@Component("userDaoImpl")
publicclass UserDaoImpl implements UserDao {
private DataSource dataSource;
public DataSource getDataSource() {returndataSource;}
@Resource(name="dataSource")
publicvoidsetDataSource(DataSource dataSource) {
this.dataSource = dataSource;}
@Override
publicvoidsave(User u) {
try {
Connection conn = dataSource.getConnection();
conn.createStatement().executeUpdate("insert into user values (null,'wjt276')");
conn.close();
} catch (SQLException e) { e.printStackTrace();}System.out.println("user save...");
}}
dbcp.BasicDataSource
1 #
initialSize=10
2 #
maxIdle=20
3 #
8/4/2019 spring2.5
30/46
spring2.5 30 46
minIdle=5
4 #
maxActive=50
5 #
logAbandoned=true
6 #
removeAbandoned=true
7 #()
removeAbandonedTimeout=180
8 #
maxWait=1000
Spring Hiberante3Spring hibernate3 SessionFactory bean, Spring
Spring hibernate3 SessionFactory xml annotation bean
(xmlmappingResourcesannotationannotatedClasses)
xml SessionFactory
User.hbm.xml
org.hibernate.dialect.MysqlDialect
true
true
annotation SessionFactory
8/4/2019 spring2.5
31/46
spring2.5 31 46
com.wjt276.model.User
org.hibernate.dialect.MySQLDialect true
true
SessionFactory bean dataSource bean
dao dataSource
SessionFactory
annotation SessionFactory
annotatedPackages
com.wjt276.model
annotatedClassess
hibernate jar
jar
1 Hibernate core
2 /lib/required
3 Slf-nop jar
mysql JDBC
annotation jar
4 Hibernate annotation jar
5 Ejb3 persistence jar
6 Hibernate common annotations jar
DDL jar
slf log4j
7 log4j jar (log4j-1.2.14.jar)
8 slf4j LOG4J jar (slf4j-log4j12-1.5.8.jar)
9 log4j (log4j.properties)
log4j.logger.org.hibernate.tool.hbm2ddl=debug
jar
jar,
Spring hibernate3
Spring hiberante(TransactionManager)
8/4/2019 spring2.5
32/46
spring2.5 32 46
Spring hibernate RunTimeExceptionSpring
Annotation
classpath:jdbc.properties
8/4/2019 spring2.5
33/46
spring2.5 33 46
com.wjt276.model.User
com.wjt276.model.Log
org.hibernate.dialect.MySQLDialect
true
true
1 Spring ()
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation=http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
2 bean Hibernate HibernateTransactionManager
org.springframework.jdbc.datasource.DataSourceTransactionManager,
SessionFactory bean bean
SessionFactory bean
3 Spring Spring (
txManager)
annotation
4 @Transactional
@Transactional
publicvoidadd(User u){
}
Spring
5
Spring
8/4/2019 spring2.5
34/46
spring2.5 34 46
1) Spring
2)
Log
@Entity
@Table(name="t_log")
publicclass Log {
privateintid;private String msg;
}
User
@Entity
publicclass User {
privateintid;
private String name;
}
UserDao
@Component("userDaoImpl")
publicclass UserDaoImpl implements UserDao {
private SessionFactory sessionFactory;
public SessionFactory getSessionFactory() {returnsessionFactory;}
// sessionFactory AOPAOP
@Resource(name="sessionFactory")
publicvoidsetSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
// Spring
//
@Override
publicvoidsave(User u) {
Session session = null;
//getCurrentSession()SessionSpring
session = sessionFactory.getCurrentSession();//
session.save(u);
System.out.println("user save...");
}}
LogDao
@Component("logDaoImpl")
publicclass LogDaoImpl implements LogDao {
private SessionFactory sessionFactory;
public SessionFactory getSessionFactory() {returnsessionFactory;}
// sessionFactory AOPAOP , beanId
sessionFactory
@Resource(name="sessionFactory")
8/4/2019 spring2.5
35/46
spring2.5 35 46
publicvoidsetSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
// Spring
//
@Override
publicvoidsave(Log log) {Session session = null;
//getCurrentSession()SessionSpring
session = sessionFactory.getCurrentSession();
session.save(log);
System.out.println("log save...");
}}
@Component(value="userService")
publicclass UserService {
private UserDao userDao = new UserDaoImpl();
private LogDao logDao;
public LogDao getLogDao() {returnlogDao;}
//Spring
@Resource(name="logDaoImpl")
publicvoidsetLogDao(LogDao logDao) { this.logDao = logDao;}
public UserDao getUserDao() { returnuserDao; }
//@ResourceJ2EE(import javax.annotation.Resource)
@Resource(name="userDaoImpl")publicvoidsetUserDao(UserDao userDao) { this.userDao = userDao; }
// @Transactional Spring
@Transactional
publicvoidadd(User u){
userDao.save(u);
Log log = new Log();
log.setMsg(u.getName() + " !");
logDao.save(log);
}
}
publicvoidtestAdd_4() throws Exception {
ApplicationContext factory = new ClassPathXmlApplicationContext("beans.xml");
UserService service = (UserService)factory.getBean("userService");
User u = new User();
u.setName("zhangshan" + System.currentTimeMillis());
service.add(u);
}
}
8/4/2019 spring2.5
36/46
spring2.5 36 46
Annotation Spring
@Transactional
Spring
@Transactional
PROPAGATION_REQUIRED
ISOLATION_DEFAULT
/ false
RuntimeException checked Exception
@Transactional
propagation Propagation
isolation Isolation ISOLATION_DEFAULT
readOnly vs.
timeout int
rollbackFor
Class Throwable
checkedexceptions unchecked exceptionsRuntimeException
rollbackForClassname
Class Throwable
noRollbackFor
Class
Throwable
noRollbackForClassname
Class Throwable
Propagation
key
PROPAGATION_REQUIRED--
PROPAGATION_SUPPORTS--
PROPAGATION_MANDATORY--PROPAGATION_REQUIRES_NEW--
PROPAGATION_NOT_SUPPORTED--
PROPAGATION_NEVER--
Isolation Level():
1Serializable
2REPEATABLE READ
3READ COMMITTED:
4Read Uncommitted
http://f/JAVA/spring/spring-framework-2.5.6-with-dependencies/spring-framework-2.5.6/docs/reference/html_single/index.html#tx-propagationhttp://f/JAVA/spring/spring-framework-2.5.6-with-dependencies/spring-framework-2.5.6/docs/reference/html_single/index.html#tx-propagation8/4/2019 spring2.5
37/46
spring2.5 37 46
3
1 Dirty reads-- A B A
B
2 non-repeatable reads-- A -total-total 100
B total 200 A total 200 A
3 phantom reads-- non-repeatable reads
non-repeatable reads total phantom reads
Select account.id where
account.name="ppgogo*", 6 id b "dd"
"ppgogo1" 7
Dirty reads non-repeatable reads phantom reads
Serializable
REPEATABLE READ
READ COMMITTED
Read Uncommitted
readOnly
readOnly
Object/Relational HibernateTopLinkdirty
checking
Timeout
timeoutJTA J2EE
XML Spring
annotation annotation xml
xml
annotation xml
8/4/2019 spring2.5
38/46
spring2.5 38 46
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation=http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
HibernateTemplate
Template Method()
hibernate
publicvoidsave(User u) {
Session session = null;
try {
session = sessionFactory.openSession();
session.beginTransaction();
session.save(u);
//session.update(u);
session.getTransaction().commit();
} catch (HibernateException e) {
session.getTransaction().rollback();
e.printStackTrace();
} finally {
session.close();
}
}
session.update()/ session.delete()
hibernateHibernateTemplate
HibernateTemplate
org.springframework.orm.hibernate3.HibernateTemplate;
HibernateTemplateHiberante SessionFactory
HibernateTemplate setSessionFactory setSessionFactory
HibernateTemplateSession saveupdate
import org.springframework.orm.hibernate3.HibernateTemplate;
@Component("userDaoImpl")
publicclass UserDaoImpl implements UserDao {
private HibernateTemplate hibernateTemplate;
public HibernateTemplate getHibernateTemplate() {returnhibernateTemplate;}
8/4/2019 spring2.5
39/46
spring2.5 39 46
@Resource(name="hibernatTemplate")
publicvoidsetHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
@Override
publicvoidsave(User u) {
hibernateTemplate.save(u);//savesessionhibernateTemplate
//HibernateTemplateSessionFactorysession
System.out.println("user save...");
}}
HibernateTemplateSpring bean sessionFactory
HibernateDaoSupport
HibernateTemplate dao
publicclass LogDaoImpl extends HibernateDaoSupport implements LogDao {
@Override
publicvoidsave(Log log) {
this.getHibernateTemplate().save(log);
//this.save(log);
System.out.println("log save...");
}
}
dao HibernateDaoSupport sessionFactory hibernateTemplate setXXX
dao setXX final
annotation xml
dao ( ) xml dao
bean bean sessionFactory hibernateTemplate
dao
hibernateDaoSupport hibernateDaoSupport
sessionFactory hibernateTemplate setXXX final
sessionFactoryhibernateTemplate setXXX dao dao
annotation
package com.wjt276.dao.impl;
import javax.annotation.Resource;
import org.springframework.orm.hibernate3.HibernateTemplate;
8/4/2019 spring2.5
40/46
spring2.5 40 46
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Component;
@Component
publicclass SuperDao extends HibernateDaoSupport {
@Resource(name="hibernateTemplate")
publicvoidsetSuperHibernateTemplate(HibernateTemplate hibernateTemplate ){
//
HibernateDaoSuppporthibernateTemplate
sessionFactorysuper.setHibernateTemplate(hibernateTemplate);
}
}
dao
LogDaoImpl
@Component
publicclass LogDaoImpl extends SuperDao implements LogDao {
@Override
publicvoidsave(Log log) {
this.getHibernateTemplate().save(log);
//this.save(log);
System.out.println("log save...");
}
}
UserDaoImpl
@Component("userDaoImpl")
publicclass UserDaoImpl extends SuperDao implements UserDao {
@Override
publicvoidsave(User u) {
this.getHibernateTemplate().save(u);
//savesessionhibernateTemplate
//HibernateTemplateSessionFactorysession
System.out.println("user save...");
}}
Spring -SSH
Struts2.1.6 + Spring2.5.6 + Hibernate3.3.2
8/4/2019 spring2.5
41/46
spring2.5 41 46
jar (jar )
jar antlr-2.7.6.jar hibernate/lib/required HQLaspectjrt spring/lib/aspectj AOPaspectjweaver .. AOPcglib-nodep-2.1_3.jar spring/lib/cglib common-annotations.jar spring/lib/j2ee @Resource
commons-collections-3.1.jar hibernate/lib/required
commons-fileupload-1.2.1.jar
struts/lib struts
commons-io-1.3.2 struts/lib strutscommons-logging-1.1.1
1.0.4(struts/lib)struts
spring
dom4j-1.6.1.jar hibernate/required xmlejb3-persistence hibernate-annotation/lib @Entityfreemarker-2.3.13 struts/lib strutshibernate3.jar hibernatehibernate-annotations hibernate-annotation/hibernate-common-annotations
hibernate-annotation/lib
javassist-3.9.0.GA.jar hiberante/lib/required hibernatejta-1.1.jar .. hibernate transactionjunit4.5mysql-ognl-2.6.11.jar struts/libslf4j-api-1.5.8.jar hibernate/lib/required hibernate-logslf4j-nop-1.5.8.jar hibernate/lib/requiredspring.jar spring/diststruts2-core-2.1.6.jar struts/libxwork-2.1.2.jar struts/lib struts2commons-dbcp spring/lib/jarkata-commonscommons-pool.jar ..struts2-spring-plugin-2.1.6.jar
struts/lib
jar copy
Spring + Hibernate
Struts2
SSH Struts2 Struts2 Spring ActionAction Spring
Spring Struts2 Struts2
1. Struts2 :struts2.xml
2. web.xml struts filter
struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
8/4/2019 spring2.5
42/46
spring2.5 42 46
struts2
/*
3. spring listenerwebapp spring
webapp Spring bean webapp Spring bean Spring listener
Struts2 for spring struts2 for spring plugin jar
struts2-spring-plugin-2.1.8.1.jar Struts2-spring-plugin webapp spring
web.xml
org.springframework.web.context.ContextLoaderListener
contextConfigLocation
classpath*:beans.xml
4. struts action jsp
action jsp
5. spring struts Action
SSH action Spring Struts-spring-plugin
Struts2
Action StrutsAction Struts2 ,
Spring Struts2 Action setXXX bean Spring
Action Struts2
Action bean ID Struts2.xml Action name
Spring dao/servceStruts2:Action
8/4/2019 spring2.5
43/46
spring2.5 43 46
6. action
Actionr name Action Struts2
bean name
struts
1. struts-default.xml
2. struts-plugin.xml
3. struts.xml
4. struts.properties
5. web.xml
DTOVO
DTO
Data Transfer Object
()
VO
Value Object
from
SSH
Jsp Session Session
hibernate load SQL ()
JSP load session jsp
SQL session
session JSP
opsession(JSP )
session, OK
Spring web.xml
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
openSessionInView
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
8/4/2019 spring2.5
44/46
spring2.5 44 46
class>
openSessionInView
/*
filter Struts2 filter OpenSessionViewFilter SessionFactorybeanbean
sessionFactory sessionFactory filter
openSessionInView
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
sessionFactoryBeanName
sf
openSessionInView
/*
JSP session
openSessionView
web.xmlopenSessionInViewbeans.xml
spring, openSessionInview
openSessionInView
1 Struts2.1.6 Strunts2 i18n
Spring
filter encoding ()
encodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
GBK
encodingFilter
8/4/2019 spring2.5
45/46
spring2.5 45 46
/*
filter web.xml Struts2 filteropenSessionInView
2 Struts2.1.8 Bug Struts.xml
LazyInitializationException
OpenSessionInViewFilter
struts2 filter
IOC XML ***
IOC Annotation ***
IOC *** * + *
*
* *
* *
AOP ***
AOP *
AOPxml annotation) *** ** +
hibernateTemplate ***
*** *** ++
OpenSessionInView *** **
CharacterEncodingFilter ***
TestContext *
SpringJDBCTemplate
SSH jar
Struts2
1 Struts2 (struts.xml)
2 lib junit spring-test1) xwork-2.1.2.jar
2) freemarker-2.3.13.jar
3) struts2-core-2.1.6.jar
4) ognl-2.6.11.jar
5) commons-io-1.3.2.jar
6) commons-fileupload-1.2.1.jar
7) commons-logging-1.1.jar
1. struts2-spring-plugin-2.1.8.1.jar
Hibernate3.3.21 hibernate3.jar
2 /lib/required
1) javassist-3.9.0.GA.jar
8/4/2019 spring2.5
46/46
spring2.5 46 46
2) commons-collections-3.1.jar
3) antlr-2.7.6.jar
4) dom4j-1.6.1.jar
5) slf4j-api-1.5.8.jar
6) jta-1.1.jar
3 Slf-nop jar
4 mysql JDBC
5 hibernate-annotations.jar
6 ejb3-persistence.jar
7 hibernate-commons-annotations.jar
8 slf log4j
1) log4j jar (log4j-1.2.14.jar)
2) slf4j LOG4J jar (slf4j-log4j12-1.5.8.jar)
3) log4j (log4j.properties)
4) log4j.logger.org.hibernate.tool.hbm2ddl=debug
Spring
1 spring.jar
2 commons-logging.jar
3 aspectjweaver.jar
4 aspectjrt.jar
5 cglib-nodep-2.1.3.jar
6 commons-dbcp.jar
7 commons-pool.jar