spring2.5 学习笔记

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)

    [email protected]

  • 8/4/2019 spring2.5

    13/46

    spring2.5 13 46

    [email protected]

    [email protected]

    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

    [email protected];

    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.xsd
  • 8/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-propagation
  • 8/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