欧美美女搞黄,亚洲一区二区四区蜜桃,中文字幕在线一区二区三区http://www.aygfsteel.com/wangbing/category/35054.html本處文章除注明“轉(zhuǎn)載”外均為原創(chuàng),轉(zhuǎn)載請注明出處。 zh-cnFri, 23 Mar 2012 08:36:53 GMTFri, 23 Mar 2012 08:36:53 GMT60spring-data-jpa使用的一個小問題http://www.aygfsteel.com/wangbing/archive/2012/03/23/372534.htmlwangchangbingwangchangbingFri, 23 Mar 2012 04:42:00 GMThttp://www.aygfsteel.com/wangbing/archive/2012/03/23/372534.htmlhttp://www.aygfsteel.com/wangbing/comments/372534.htmlhttp://www.aygfsteel.com/wangbing/archive/2012/03/23/372534.html#Feedback0http://www.aygfsteel.com/wangbing/comments/commentRss/372534.htmlhttp://www.aygfsteel.com/wangbing/services/trackbacks/372534.html而這時,在service類里面@Autowired的XXXXXXRepository提示空指針異常。
這個問題在我的testcase里面是不存在,也就是說,使用AbstractTransactionalJUnit4SpringContextTests進行加載xml文件的方式,所有的bean都可以準確的注入。
后來我換了@Service方式,加入<context:component-scan base-package=""/>就可以了。
懷疑是spring的data-jpa定義的XXXXXXRepository在web模式下面加載到application context里面出了問題。
也有可能是因為我的xxxxx-servlet.xml文件里面哪里定義不對導致的。

wangchangbing 2012-03-23 12:42 發(fā)表評論
]]>
spring3.1使用cachehttp://www.aygfsteel.com/wangbing/archive/2012/03/21/372410.htmlwangchangbingwangchangbingWed, 21 Mar 2012 15:48:00 GMThttp://www.aygfsteel.com/wangbing/archive/2012/03/21/372410.htmlhttp://www.aygfsteel.com/wangbing/comments/372410.htmlhttp://www.aygfsteel.com/wangbing/archive/2012/03/21/372410.html#Feedback0http://www.aygfsteel.com/wangbing/comments/commentRss/372410.htmlhttp://www.aygfsteel.com/wangbing/services/trackbacks/372410.html
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns:cache
="http://www.springframework.org/schema/cache"  
    xmlns:p
="http://www.springframework.org/schema/p"  
    xsi:schemaLocation
="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
    http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd"
>  
    <cache:annotation-driven />  
    <!-- generic cache manager -->  
    <bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">  
        <property name="caches">  
            <set>  
                <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="default"/>  
                <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="sys_resource"/>  
            </set>  
        </property>  
    </bean>  
</beans>  

java代碼
package org.jeasyweb.framework.sys_user.service;

import java.util.Iterator;
import java.util.Set;

import org.jeasyweb.framework.sys_user.entity.SysResource;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;

@ContextConfiguration({ "classpath:applicationContext-dataSource.xml",
        "classpath:applicationContext-role.xml",
        "classpath:applicationContext-cache.xml" })
public class UserServiceTest extends
        AbstractTransactionalJUnit4SpringContextTests {
    @Autowired
    UserService userService;

    @Test
    public void testHello() {
        Set<SysResource> resources = userService
                .getResourceByUserId(new Long(1));
        Iterator<SysResource> it = resources.iterator();
    }

    @Test
    public void testCache() {
        Set<SysResource> resources2 = userService.getResourceByUserId(new Long(
                1));
    }
}

service代碼
    @Override
    @Cacheable(value = "sys_resource", key = "'getResourceByUserId_' + #id")
    public Set<SysResource> getResourceByUserId(Long id) {
//.





wangchangbing 2012-03-21 23:48 發(fā)表評論
]]>
Spring+JMS例子http://www.aygfsteel.com/wangbing/archive/2010/03/31/317093.htmlwangchangbingwangchangbingWed, 31 Mar 2010 12:57:00 GMThttp://www.aygfsteel.com/wangbing/archive/2010/03/31/317093.htmlhttp://www.aygfsteel.com/wangbing/comments/317093.htmlhttp://www.aygfsteel.com/wangbing/archive/2010/03/31/317093.html#Feedback0http://www.aygfsteel.com/wangbing/comments/commentRss/317093.htmlhttp://www.aygfsteel.com/wangbing/services/trackbacks/317093.html第一: 在applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>  
 <bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
   <property name="brokerURL">
     <value>tcp://192.168.3.48:61616</value>
   </property>
 
 </bean>
 
 <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory">
      <ref bean="connectionFactory"/>
    </property>
 </bean>
 
 <bean id="destination" class="org.apache.activemq.command.ActiveMQQueue">
   <constructor-arg index="0">
     <value>HelloWorldQueue</value>
   </constructor-arg>
 </bean>
</beans>

2.寫發(fā)送方

package ch13.JMS;

import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;

public class HelloWorldSender
{
 public static void main(String args[]) throws Exception
 {
  ApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "ch13/JMS/applicationContext.xml" });
  JmsTemplate jmsTemplate = (JmsTemplate) context.getBean("jmsTemplate");
  Destination destination = (Destination) context.getBean("destination");
  jmsTemplate.send
  (
   destination, new MessageCreator()
   {
    public Message createMessage(Session session) throws JMSException
    {
     return session.createTextMessage("大家好這個是測試!");
    }
   }
  );
 }

}
3.寫接收方

package ch13.JMS;

import javax.jms.Destination;
import javax.jms.TextMessage;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jms.core.JmsTemplate;

public class HelloWorldReciver
{

 public static void main(String args[]) throws Exception
 {
  ApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "ch13/JMS/applicationContext.xml" });
  JmsTemplate jmsTemplate = (JmsTemplate) context.getBean("jmsTemplate");
  Destination destination = (Destination) context.getBean("destination");
  System.out.println("will wait:" + jmsTemplate.getReceiveTimeout()+ " seconds for message");
  TextMessage msg = (TextMessage) jmsTemplate.receive(destination);
  System.out.println("reviced msg is:" + msg.getText());
 }

}

4.啟動activemq中bin 下的activemq.bat

5.先運行 HelloWorldSender

6.再運行 HelloWorld

7.結(jié)果:

will wait:-1 seconds for message
reviced msg is:大家好 這個是測試!



wangchangbing 2010-03-31 20:57 發(fā)表評論
]]>
在spring的bean中獲取ServletContexthttp://www.aygfsteel.com/wangbing/archive/2010/03/16/315643.htmlwangchangbingwangchangbingTue, 16 Mar 2010 15:02:00 GMThttp://www.aygfsteel.com/wangbing/archive/2010/03/16/315643.htmlhttp://www.aygfsteel.com/wangbing/comments/315643.htmlhttp://www.aygfsteel.com/wangbing/archive/2010/03/16/315643.html#Feedback0http://www.aygfsteel.com/wangbing/comments/commentRss/315643.htmlhttp://www.aygfsteel.com/wangbing/services/trackbacks/315643.html我的需求是獲取spring開發(fā)的web項目在服務器上的絕對路徑。

  進而引申到我需要知道servletContext,因為servletContext有一個servletContext.getRealPath("/");方法,這個方法就能獲取項目的絕對路徑。

  常規(guī)方式下我們?nèi)绾潍@取servletContext呢?我們需要讓我們的類繼承HttpServlet類,然后獲取servletConfig,通過這個獲取servletContext(servletConfig.getServletContext())。(至于如何獲取servletconfig對象,大家去google,百度找找吧)

  但是我需要在spring的bean中直接獲取,這下可和我們常規(guī)的操作有些不同,因為spring的bean都是pojo的。根本見不著servletconfig和servletcontext的影子。

  這里我需要指出spring給我們提供了兩個接口:org.springframework.web.context.ServletContextAware和

org.springframework.web.context.ServletConfigAware。我們可以讓我們的bean實現(xiàn)上邊的任何一個接口就能獲取到servletContext了 .

代碼如下:



這樣,我們的bean就能夠直接獲取到servletContext了

如果你想要servletConfig,那方法一樣,只是實現(xiàn)的接口不同了。

原理推想:應該是在創(chuàng)建spring的sessionFactory的時候,將應用服務器的相關屬性一并加載,查看創(chuàng)建的bean是否實現(xiàn)相關接口,如果實現(xiàn)了,就將相關值賦予bean。

注意點:

  1、這東西是無法用junit進行單元測試的,因為他依賴于應用服務器


wangchangbing 2010-03-16 23:02 發(fā)表評論
]]>
spring和hibernate事物控制@Transactional的完整例子http://www.aygfsteel.com/wangbing/archive/2010/01/04/308215.htmlwangchangbingwangchangbingMon, 04 Jan 2010 14:54:00 GMThttp://www.aygfsteel.com/wangbing/archive/2010/01/04/308215.htmlhttp://www.aygfsteel.com/wangbing/comments/308215.htmlhttp://www.aygfsteel.com/wangbing/archive/2010/01/04/308215.html#Feedback0http://www.aygfsteel.com/wangbing/comments/commentRss/308215.htmlhttp://www.aygfsteel.com/wangbing/services/trackbacks/308215.html
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop
="http://www.springframework.org/schema/aop"
    xmlns:tx
="http://www.springframework.org/schema/tx"
    xsi:schemaLocation
="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"
>

    
<!-- 數(shù)據(jù)源 -->
    
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
        
<property name="url" value="jdbc:mysql://localhost/jeasyweb" />
        
<property name="username" value="root" />
        
<property name="password" value="sa" />
    
</bean>

    
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        
<property name="dataSource" ref="dataSource" />
        
<property name="hibernateProperties">
            
<value>
                hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
                hibernate.show.sql=true
            
</value>
        
</property>
        
<property name="mappingLocations">
            
<list>
                
<value>classpath:com/domain/User.hbm.xml</value>
            
</list>
        
</property>
    
</bean>

    
<!-- 事務管理 -->
    
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        
<property name="sessionFactory" ref="sessionFactory" />
    
</bean>

    
<!-- enable the configuration of transactional behavior based on annotations -->
    
<tx:annotation-driven transaction-manager="txManager" proxy-target-class="true" />

    
<bean id="myTarget" class="com.dao.UserDao">
        
<property name="sessionFactory" ref="sessionFactory" />
    
</bean>

</beans>

實體JAVA類和XML文件:
package com.domain;

public class User {
    private Integer id;

    private String email;

    private String username;

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

}

XML映射配置文件:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    
<class name="com.domain.User" table="User"  >
        
<id name="id" type="integer">
            
<column name="ID" />
            
<generator class="increment" />
        
</id>
        
<property name="username" type="string">
            
<column name="USERNAME" length="16"  />
        
</property>
        
<property name="email" type="string">
            
<column name="EMAIL" length="256" />
        
</property>
    
</class>
</hibernate-mapping>

DAO代碼:
package com.dao;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.transaction.annotation.Transactional;

import com.domain.User;

public class UserDao extends HibernateDaoSupport {
    
/**
     * 更新某一字段的操作。并使用事務管理。
     
*/
    @Transactional
    
public void updateField() {
//        getHibernateTemplate().bulkUpdate("update com.domain.User set username = '管理員4' where id = 1 ");
        
// 有意制造異常
//        getHibernateTemplate().bulkUpdate("update spring.User2 set username = '管理員4' where id = 1 ");
        
        User u 
= new User();
        u.setUsername(
"xx");
        getHibernateTemplate().save(u);
        
        User u1 
= new User();
        u1.setUsername(
"x111111111111111111111111111111111111111111111111111111111111111111111111111x");
        getHibernateTemplate().save(u1);
        
        
    }
    
    

}


測試代碼:
package com.test;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.dao.UserDao;

public class TestMain {

    
/**
     * 
@param args
     
*/
    
public static void main(String[] args) {
        
// TODO Auto-generated method stub
        ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext("NewFile.xml");
        UserDao um 
= (UserDao) appContext.getBean("myTarget");
        um.updateField();
    }

}


日志配置:
# This is the configuring for logging displayed in the Application Server
log4j.rootCategory=DEBUG, stdout,logfile

#stdout configure
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern= %d %p [%c] - %m%n

#logfile configure
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.File=../logs/jeasyweb.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern= %d %p [%c] - %m%n

# Control logging for other open source packages
# Changing the log level to DEBUG when debug
log4j.logger.org.springframework=DEBUG 

log4j.logger.org.dozer=ERROR

log4j.logger.org.apache.commons=DEBUG

# Changing the log level to DEBUG will display SQL Hibernate generated
log4j.logger.org.hibernate=DEBUG
log4j.logger.org.hibernate.SQL=DEBUG
log4j.logger.org.hibernate.cache=DEBUG
log4j.logger.net.sf.ehcache=DEBUG
log4j.logger.org.apache.commons.validator.ValidatorResources=ERROR





wangchangbing 2010-01-04 22:54 發(fā)表評論
]]>
關于spring和hibernate的事物控制@Transactional的使用http://www.aygfsteel.com/wangbing/archive/2010/01/04/308212.htmlwangchangbingwangchangbingMon, 04 Jan 2010 14:33:00 GMThttp://www.aygfsteel.com/wangbing/archive/2010/01/04/308212.htmlhttp://www.aygfsteel.com/wangbing/comments/308212.htmlhttp://www.aygfsteel.com/wangbing/archive/2010/01/04/308212.html#Feedback1http://www.aygfsteel.com/wangbing/comments/commentRss/308212.htmlhttp://www.aygfsteel.com/wangbing/services/trackbacks/308212.html閱讀全文

wangchangbing 2010-01-04 22:33 發(fā)表評論
]]>
【轉(zhuǎn)載】ant命令使用之delete和copyhttp://www.aygfsteel.com/wangbing/archive/2009/06/14/282195.htmlwangchangbingwangchangbingSun, 14 Jun 2009 10:22:00 GMThttp://www.aygfsteel.com/wangbing/archive/2009/06/14/282195.htmlhttp://www.aygfsteel.com/wangbing/comments/282195.htmlhttp://www.aygfsteel.com/wangbing/archive/2009/06/14/282195.html#Feedback0http://www.aygfsteel.com/wangbing/comments/commentRss/282195.htmlhttp://www.aygfsteel.com/wangbing/services/trackbacks/282195.html

4.5 Copy Task:對文件和目錄進行復制

Copy 任務把一個或多個文件復制到指定的目錄下。但要注意的是,如果目標目錄下具有同名的文件,那么只有當源文件相對于目標文件更新時,Ant工具才會復制這個文件。在Copy任務中可以使用FileSet類型來定義文件集合。

4.5.1 Copy Task的屬性及功能

Copy 任務具有以下屬性:

(1)file:用于指定要復制的源文件。

(2)preservelastmodified:作用是使得復制后的文件與源文件的最后修改時間相同。默認為false。

(3)tofile:用于指定要復制到的文件。

(4)todir:用于指定要復制到的目標目錄。todir和tofile只能使用其中一個屬性。

(5)overwrite:用于指定是否需要覆蓋目錄和文件,不管文件是否比源文件新,都會覆蓋。默認為false。

(6)filtering:用于指定在復制時是否使用構(gòu)件文件的全局過濾器對文件進行過濾。默認為false。

(7)flatten:用于指定是否需要復制目錄,如果為true代表把所有的文件復制到todir屬性設定的目錄下。默認為false,復制目錄。

(8)includeEmptyDirs:用于指定是否復制空目錄。默認為true。

(9)failonerror:用于指定當遇到錯誤時是否停止執(zhí)行。默認為true。

(10)verbose:用于指定當復制文件時是否記錄日志信息。

(11)encoding:用于設定復制文件時的編碼或文件過濾器使用的編碼方式。默認時使用Java虛擬機的編碼方式。

(12)outputencoding:指定寫文件時的編碼方式。默認時使用Java虛擬機的編碼方式。

(13)enablemultiplemappings:用于設定是否允許多個映射。默認為false。

(14)granularity:用于指定一個文件修改時間的毫秒數(shù)據(jù)的允許誤差。因為不是所有的文件系統(tǒng)的修改時間都是精確到毫秒數(shù)。默認時為0,如果為DOS系統(tǒng)則為2。

4.5.2 通過Copy Task實現(xiàn)文件和目錄復制功能實例

不管是對程序進行打包還是一般的文件操作,基本上都離不開復制功能。通過Ant工具的Copy任務可以讓程序在Windows和Linux/UNIX下對文件和目錄進行復制操作。例如:

(1)對單個文件進行復制:

<copy file="myfile.txt" tofile="mycopy.txt"/>

這個例子的作用是在當前目錄復制myfile.txt,并把復制的文件命名為mycopy.txt。當需要把文件復制到別外的目錄時可以這樣編寫:

<copy file="myfile.txt" todir="../some/other/dir"/>

這個例子的作用是把文件復制到與當前目錄同級的some目錄的/other/dir子目錄下。這里“..”代表相對路徑(當前目錄的上一級目錄)。

(2)對文件目錄進行復制:

<copy todir="../new/dir">

    <fileset dir="src_dir"/>

</copy>

這個例子的作用是把src_dir目錄復制到../new/dir目錄下。有時對文件進行復制時需要對文件進行備份。下面舉一個復制文件時對文件進行備份的例子。

<copy todir="../backup/dir">

<fileset dir="src_dir">

    <exclude name="**/*.java"/>

   </fileset>

<globmapper from="*" to="*.bak"/>

</copy>

這個例子的作用是把src_dir目錄及其子目錄下所有非Java文件復制到../backup/dir目錄下,并重命名為bak文件,以作備份。

4.5.3 在執(zhí)行Copy Task時使用文件過濾的實例

下面是一個復制文件的同時替換文件中的特殊符號的例子:

<copy todir="../backup/dir">

    <fileset dir="src_dir"/>

    <filterset>

      <filter token="TITLE" value="Foo Bar"/>

    </filterset>

</copy>

這個例子的作用是把src_dir目錄下的所有文件復制到../backup/dir目錄,并在所有文件中查找并替換@TITLE@為Foo Bar。當要進行新產(chǎn)品發(fā)布時通過需要替換文件中的版本信息和時間信息。

說明:在Ant工具中還提供了copydir和copyfile這兩個特定的任務,分別用于對目錄和文件進行復制。但自從有了Copy任務后,這兩個任務已過期,不建議再使用,應該統(tǒng)一使用Copy任務。

4.6 Delete Task:對文件和目錄進行刪除

Delete 任務可用于刪除一個或多個文件,或刪除一個或多個目錄和目錄下的文件。默認時不會刪除空目錄,要刪除空目錄可以設定includeEmptyDirs屬性為true。在Delete任務中可以使用FileSet和DirSet類型。

4.6.1 Delete Task的屬性及功能

Delete任務包括以下屬性:

(1)file:用于指定要刪除的文件的名稱,可以為相對路徑或絕對路徑。

(2)dir:指定一個將要被刪除的根目錄。這個目錄下的子目錄及文件將可能被刪除。dir屬性和file屬性兩者必須指定其一。

(3)verbose:作用是指定是否在命令行中輸出被刪除的文件的名稱。默認為false。

(4)quiet:作用是指定當要被刪除的文件或目錄不存在時是否不顯示提示信息。默認為false,代表要顯示提示信息。

(5)failonerror:用于指定當出現(xiàn)錯誤時是否停止執(zhí)行命令。

(6)includeemptydirs:表明當使用FileSet類型時是否刪除空的目錄。

(7)includes:用于指定將要刪除的文件或目錄的模式。可用逗號或空格符進行分隔。

(8)includesfile:用于指定要刪除的文件的模式。已不建議使用。

(9)excludes:用于指定一個或多個文件模式或目錄模式。這些符合條件的文件和目錄將不被刪除。

(10)excludesfile:用于指定將不被刪除的文件模式,已不建議使用。

(11)defaultexcludes:用于指定是否使用Ant默認的default excludes模式,已不建議使用。

(12)deleteonexit:用于指定是否采用Java File類中的deleteOnExit()方法進行判斷,如果使用這個方法,那么僅當存在文件時才進行刪除,默認取值為false。

4.6.2 在執(zhí)行Delete Task時使用文件過濾的實例

(1)刪除單個文件的實例:

<delete file="/lib/ant.jar"/>

這個例子的作用是刪除lib目錄下的ant.jar文件。

(2)刪除目錄的實例:

<delete dir="lib"/>

這個例子的作用是刪除lib目錄,包括這個目錄的所有子目錄及文件,可以通過include或exclude類型指定刪除的部分文件,而不是目錄下的所有文件。

(3)刪除所有備份文件和空的目錄的例子:

<delete includeEmptyDirs="true">

    <fileset dir="." includes="**/*.bak"/>

</delete>

這個例子的作用是刪除當前目錄以及其子目錄下的所有.bak文件,同時也刪除所有空的目錄。

http://book.csdn.net/bookfiles/379/10037914215.shtml



wangchangbing 2009-06-14 18:22 發(fā)表評論
]]>
利用AnnotationMethodHandlerAdapter對Spring的Controller注入session對象http://www.aygfsteel.com/wangbing/archive/2009/06/04/280060.htmlwangchangbingwangchangbingThu, 04 Jun 2009 11:31:00 GMThttp://www.aygfsteel.com/wangbing/archive/2009/06/04/280060.htmlhttp://www.aygfsteel.com/wangbing/comments/280060.htmlhttp://www.aygfsteel.com/wangbing/archive/2009/06/04/280060.html#Feedback0http://www.aygfsteel.com/wangbing/comments/commentRss/280060.htmlhttp://www.aygfsteel.com/wangbing/services/trackbacks/280060.html
    <bean id="userArgumentResolver" class="com.greatwall.module.yhqxgl.interceptor.UserArgumentResolver" />
    
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"  >
         
<property name="customArgumentResolver">
            
<ref bean="userArgumentResolver"/>
        
</property>
    
</bean>

下面是java代碼:
package com.greatwall.module.yhqxgl.interceptor;

import org.springframework.core.MethodParameter;
import org.springframework.web.bind.support.WebArgumentResolver;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.context.request.RequestAttributes;

import com.greatwall.module.yhqxgl.YhqxglConstants;
import com.greatwall.module.yhqxgl.domain.User;

public class UserArgumentResolver implements WebArgumentResolver {

    
public Object resolveArgument(MethodParameter methodParameter, NativeWebRequest webRequest) throws Exception {
        
        
if (methodParameter.getParameterType().equals(User.class)) {
            
return webRequest.getAttribute(YhqxglConstants.GREATWALL_SESSION_USER, RequestAttributes.SCOPE_SESSION);
        }
        
return UNRESOLVED;
    }

    
}

調(diào)用的過程很簡單,直接在controller對應的函數(shù)里面加入?yún)?shù)User即可。
@RequestMapping("/txn960204.do")
    
public void txn960204(HttpServletResponse response, HttpServletRequest req,SysCodedata sysCodedata,User user) {
        
try {
            sysCodedata.setUpdateTime(DateUtils.currentDateTime());
            sysCodedata.setUpdateUsername(user.getUsername());
            
            sysCodedataService.updateOneSysCodedata(sysCodedata);
            JsonUtils.success(
"修改保存代碼明細表成功!", response);
        } 
catch (ServiceException e) {
            e.printStackTrace();
            JsonUtils.error(e, response);
        }
    }
    



wangchangbing 2009-06-04 19:31 發(fā)表評論
]]>
hibernate lazy load相關問題http://www.aygfsteel.com/wangbing/archive/2009/05/22/277364.htmlwangchangbingwangchangbingFri, 22 May 2009 08:27:00 GMThttp://www.aygfsteel.com/wangbing/archive/2009/05/22/277364.htmlhttp://www.aygfsteel.com/wangbing/comments/277364.htmlhttp://www.aygfsteel.com/wangbing/archive/2009/05/22/277364.html#Feedback2http://www.aygfsteel.com/wangbing/comments/commentRss/277364.htmlhttp://www.aygfsteel.com/wangbing/services/trackbacks/277364.htmlorg.apache.jasper.JasperException: javax.servlet.ServletException: javax.servlet.jsp.JspException: An error occurred while evaluating custom action attribute "name" with value "${sysUserinfo.username}": An error occurred while getting property "username" from an instance of class com.greatwall.module.yhqxgl.domain.SysUserinfo$$EnhancerByCGLIB$$b21cb1cc (org.hibernate.LazyInitializationException: could not initialize proxy - no Session) at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:522) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:398) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302) at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:236) at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:257) at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1183) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:902) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:807) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:501) at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Thread.java:595) Caused by: javax.servlet.ServletException: javax.servlet.jsp.JspException: An error occurred while evaluating custom action attribute "name" with value "${sysUserinfo.username}": An error occurred while getting property "username" from an instance of class com.greatwall.module.yhqxgl.domain.SysUserinfo$$EnhancerByCGLIB$$b21cb1cc (org.hibernate.LazyInitializationException: could not initialize proxy - no Session) at org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:848) at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:781) at org.apache.jsp.module.yhqxgl.sys_005fuserinfo.update_002dsys_005fuserinfo_jsp._jspService(update_002dsys_005fuserinfo_jsp.java:117) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374) ... 30 more Caused by: org.hibernate.LazyInitializationException: could not initialize proxy - no Session at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:57) at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:111) at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:150) at com.greatwall.module.yhqxgl.domain.SysUserinfo$$EnhancerByCGLIB$$b21cb1cc.getUsername() at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.apache.taglibs.standard.lang.jstl.ArraySuffix.evaluate(ArraySuffix.java:278) at org.apache.taglibs.standard.lang.jstl.ComplexValue.evaluate(ComplexValue.java:107) at org.apache.taglibs.standard.lang.jstl.ELEvaluator.evaluate(ELEvaluator.java:204) at org.apache.taglibs.standard.lang.jstl.ELEvaluator.evaluate(ELEvaluator.java:163) at org.apache.taglibs.standard.lang.jstl.Evaluator.evaluate(Evaluator.java:101) at org.apache.taglibs.standard.lang.jstl.Evaluator.evaluate(Evaluator.java:129) at org.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager.evaluate(ExpressionEvaluatorManager.java:75) at com.greatwall.extjsptag.tags.form.TextTags.setName(TextTags.java:138) at org.apache.jsp.module.yhqxgl.sys_005fuserinfo.update_002dsys_005fuserinfo_jsp._jspx_meth_gw_005ftext_005f0(update_002dsys_005fuserinfo_jsp.java:452) at org.apache.jsp.module.yhqxgl.sys_005fuserinfo.update_002dsys_005fuserinfo_jsp._jspx_meth_gw_005fblock_005f0(update_002dsys_005fuserinfo_jsp.java:383) at org.apache.jsp.module.yhqxgl.sys_005fuserinfo.update_002dsys_005fuserinfo_jsp._jspx_meth_gw_005fviewport_005f0(update_002dsys_005fuserinfo_jsp.java:328) at org.apache.jsp.module.yhqxgl.sys_005fuserinfo.update_002dsys_005fuserinfo_jsp._jspx_meth_gw_005fbody_005f0(update_002dsys_005fuserinfo_jsp.java:291) at org.apache.jsp.module.yhqxgl.sys_005fuserinfo.update_002dsys_005fuserinfo_jsp._jspx_meth_gw_005fhtml_005f0(update_002dsys_005fuserinfo_jsp.java:172) at org.apache.jsp.module.yhqxgl.sys_005fuserinfo.update_002dsys_005fuserinfo_jsp._jspService(update_002dsys_005fuserinfo_jsp.java:108) ... 33 more

wangchangbing 2009-05-22 16:27 發(fā)表評論
]]>
[轉(zhuǎn)]Hibernate和spring結(jié)合的OpenSessionInViewFilterhttp://www.aygfsteel.com/wangbing/archive/2009/05/21/273471.htmlwangchangbingwangchangbingThu, 21 May 2009 12:45:00 GMThttp://www.aygfsteel.com/wangbing/archive/2009/05/21/273471.htmlhttp://www.aygfsteel.com/wangbing/comments/273471.htmlhttp://www.aygfsteel.com/wangbing/archive/2009/05/21/273471.html#Feedback2http://www.aygfsteel.com/wangbing/comments/commentRss/273471.htmlhttp://www.aygfsteel.com/wangbing/services/trackbacks/273471.html

看到了關于Spring提供的Open Session In View的一篇文章,很詳細的介紹了相關細節(jié)。下面的文章轉(zhuǎn)載自:
http://blog.sina.com.cn/s/blog_5dc12c490100crr5.html


使用Spring提供的Open Session In View而引起Write operations are not allowed in read-only mode (FlushMode.NEVER) 錯誤解決:
    在沒有使用Spring提供的Open Session In View情況下,因需要在service(or Dao)層里把session關閉,所以lazy loading 為true的話,要在應用層內(nèi)把關系集合都初始化,如 company.getEmployees(),否則Hibernate拋session already closed Exception;    Open Session In View提供了一種簡便的方法,較好地解決了lazy loading問題.
    它有兩種配置方式OpenSessionInViewInterceptor和OpenSessionInViewFilter(具體參看SpringSide),功能相同,只是一個在web.xml配置,另一個在application.xml配置而已。
    Open Session In View在request把session綁定到當前thread期間一直保持hibernate session在open狀態(tài),使session在request的整個期間都可以使用,如在View層里PO也可以lazy loading數(shù)據(jù),如 ${ company.employees }。當View 層邏輯完成后,才會通過Filter的doFilter方法或Interceptor的postHandle方法自動關閉session。
 
OpenSessionInViewInterceptor配置
<beans>
<bean name="openSessionInViewInterceptor"
class
="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<bean id="urlMapping"
class
="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="interceptors">
<list>
<ref bean="openSessionInViewInterceptor"/>
</list>
</property>
<property name="mappings">
 ..
</property>
</bean>
 

 
</beans>
 
OpenSessionInViewFilter配置
<web-app>
 

 
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
<!-- singleSession默認為true,若設為false則等于沒用OpenSessionInView -->
<init-param>
<param-name>singleSession</param-name>
<param-value>true</param-value>
</init-param>
</filter>
 

 
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>

 
</web-app>
 
很多人在使用OpenSessionInView過程中提及一個錯誤:
org.springframework.dao.InvalidDataAccessApiUsageException: Write operations
are not allowed in read-only mode (FlushMode.NEVER) - turn your Session into
FlushMode.AUTO or remove 'readOnly' marker from transaction definition
看看OpenSessionInViewFilter里的幾個方法
 
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response,FilterChain filterChain)
throws ServletException, IOException {
 SessionFactory sessionFactory = lookupSessionFactory();
 logger.debug("Opening Hibernate Session in OpenSessionInViewFilter");
 Session session = getSession(sessionFactory);
 TransactionSynchronizationManager.bindResource(
  sessionFactory, new SessionHolder(session));
 try {
  filterChain.doFilter(request, response);
 }
 finally {
 TransactionSynchronizationManager.unbindResource(sessionFactory);
 logger.debug("Closing Hibernate Session in OpenSessionInViewFilter");
 closeSession(session, sessionFactory);
 }
}
 
 
protected Session getSession(SessionFactory sessionFactory)
throws DataAccessResourceFailureException {
 Session session = SessionFactoryUtils.getSession(sessionFactory, true);
 session.setFlushMode(FlushMode.NEVER);
 return session;
}

protected void closeSession(Session session, SessionFactory sessionFactory)
throws CleanupFailureDataAccessException {
 SessionFactoryUtils.closeSessionIfNecessary(session, sessionFactory);
}
 
     可以看到OpenSessionInViewFilter在getSession的時候,會把獲取回來的session的flush mode 設為FlushMode.NEVER。然后把該sessionFactory綁定到 TransactionSynchronizationManager,使request的整個過程都使用同一個session,在請求過后再接除該 sessionFactory的綁定,最后closeSessionIfNecessary根據(jù)該 session是否已和transaction綁定來決定是否關閉session。在這個過程中,若HibernateTemplate 發(fā)現(xiàn)自當前session有不是readOnly的transaction,就會獲取到FlushMode.AUTO Session,使方法擁有寫權(quán)限。
 
public static void closeSessionIfNecessary(Session session, SessionFactory sessionFactory)
throws CleanupFailureDataAccessException {
 
if (session == null ||
TransactionSynchronizationManager.hasResource(sessionFactory)) {
return;
}
logger.debug("Closing Hibernate session");
try {
session.close();
}
catch (JDBCException ex) {
// SQLException underneath
throw new CleanupFailureDataAccessException("Could not close Hibernate session", ex.getSQLException());
}catch (HibernateException ex) {
throw new CleanupFailureDataAccessException("Could not close Hibernate session", ex);
}
}
 
    也即是,如果有不是readOnly的transaction就可以由Flush.NEVER轉(zhuǎn)為Flush.AUTO,擁有 insert,update,delete操作權(quán)限,如果沒有transaction,并且沒有另外人為地設flush model的話,則doFilter的整個過程都是Flush.NEVER。所以受transaction保護的方法有寫權(quán)限,沒受保護的則沒有。
采用spring的事務聲明,使方法受transaction控制
 
 
<bean id="baseTransaction"
class
="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract
="true">
<property name="transactionManager" ref="transactionManager"/>
<property name="proxyTargetClass" value="true"/>
<property name="transactionAttributes">
<props>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
 
<bean id="userService" parent="baseTransaction">
 
<property name="target">
<bean class="com.phopesoft.security.service.impl.UserServiceImpl"/>
</property>
</bean>
 
對 于上例,則以save,add,update,remove開頭的方法擁有可寫的事務,如果當前有某個方法,如命名為importExcel(),則因沒 有transaction而沒有寫權(quán)限,這時若方法內(nèi)有insert,update,delete操作的話,則需要手動設置flush model為Flush.AUTO,如
session.setFlushMode(FlushMode.AUTO);
session.save(user);
session.flush();
      盡 管Open Session In View看起來還不錯,其實副作用不少。看回上面OpenSessionInViewFilter的doFilterInternal方法代碼,這個方法 實際上是被父類的doFilter調(diào)用的,因此,我們可以大約了解的OpenSessionInViewFilter調(diào)用流程: request(請求)->open session并開始transaction->controller->View(Jsp)->結(jié)束transaction并 close session.
     一切看起來很正確,尤其是在本地開發(fā)測試的時候沒出現(xiàn)問題,但試想下如果流程中的某一步被阻塞的話,那在這期間connection就一直被占用而不釋 放。最有可能被阻塞的就是在寫Jsp這步,一方面可能是頁面內(nèi)容大,response.write的時間長,另一方面可能是網(wǎng)速慢,服務器與用戶間傳輸時 間久。當大量這樣的情況出現(xiàn)時,就有連接池連接不足,造成頁面假死現(xiàn)象。
Open Session In View是個雙刃劍,放在公網(wǎng)上內(nèi)容多流量大的網(wǎng)站請慎用。



wangchangbing 2009-05-21 20:45 發(fā)表評論
]]>
Spring和Hibernate結(jié)合時遇到的問題http://www.aygfsteel.com/wangbing/archive/2009/05/21/273261.htmlwangchangbingwangchangbingThu, 21 May 2009 12:28:00 GMThttp://www.aygfsteel.com/wangbing/archive/2009/05/21/273261.htmlhttp://www.aygfsteel.com/wangbing/comments/273261.htmlhttp://www.aygfsteel.com/wangbing/archive/2009/05/21/273261.html#Feedback1http://www.aygfsteel.com/wangbing/comments/commentRss/273261.htmlhttp://www.aygfsteel.com/wangbing/services/trackbacks/273261.html問題描述:

Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition. 



wangchangbing 2009-05-21 20:28 發(fā)表評論
]]>
關于synchronized的一段代碼http://www.aygfsteel.com/wangbing/archive/2009/03/12/259427.htmlwangchangbingwangchangbingThu, 12 Mar 2009 12:57:00 GMThttp://www.aygfsteel.com/wangbing/archive/2009/03/12/259427.htmlhttp://www.aygfsteel.com/wangbing/comments/259427.htmlhttp://www.aygfsteel.com/wangbing/archive/2009/03/12/259427.html#Feedback1http://www.aygfsteel.com/wangbing/comments/commentRss/259427.htmlhttp://www.aygfsteel.com/wangbing/services/trackbacks/259427.html
package com.example.thread2;


public class TestDeadLock implements Runnable {
    
public int flag = 1;
    
static Object S1 = new Object();
    
static Object S2 = new Object();
    
public String threadId;
    
public TestDeadLock(String s){
        threadId 
= s;
    }

    
public void run() {
        System.out.println(threadId 
+ ":flag=" + flag);
        
if (flag == 1) {
            
synchronized (S1) {
                
try {
                    Thread.sleep(
500);
                } 
catch (Exception e) {
                    e.printStackTrace();
                }
                
synchronized (S2) {
                    System.out.println(
"1");
                }
            }
        }
        
if (flag == 0) {
            
synchronized (S2) {
                
try {
                    Thread.sleep(
500);
                } 
catch (Exception e) {
                    e.printStackTrace();
                }
                
synchronized (S1) {
                    System.out.println(
"0");
                }
            }
        }
    }

    
public static void main(String[] args) {
        TestDeadLock td1 
= new TestDeadLock("No.1");
        TestDeadLock td2 
= new TestDeadLock("No.2");
        td1.flag 
= 1;
        td2.flag 
= 0;
        Thread t1 
= new Thread(td1);
        Thread t2 
= new Thread(td2);
        t1.start();
        t2.start();
    }
}


wangchangbing 2009-03-12 20:57 發(fā)表評論
]]>
SpringMVC下的權(quán)限控制(2)http://www.aygfsteel.com/wangbing/archive/2009/02/20/255831.htmlwangchangbingwangchangbingFri, 20 Feb 2009 07:07:00 GMThttp://www.aygfsteel.com/wangbing/archive/2009/02/20/255831.htmlhttp://www.aygfsteel.com/wangbing/comments/255831.htmlhttp://www.aygfsteel.com/wangbing/archive/2009/02/20/255831.html#Feedback0http://www.aygfsteel.com/wangbing/comments/commentRss/255831.htmlhttp://www.aygfsteel.com/wangbing/services/trackbacks/255831.html
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:aop
="http://www.springframework.org/schema/aop" 
    xmlns:p
="http://www.springframework.org/schema/p"
    xmlns:context
="http://www.springframework.org/schema/context"
    xsi:schemaLocation
="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
    http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-2.5.xsd"
>
    
<context:component-scan base-package="com.example" />
    
<bean id="handlerMappingTemplate" abstract="true">
        
<property name="interceptors">
            
<list>
                
<bean class="com.example.aspect.LoginCheckInterceptor" />
            
</list>
        
</property>
    
</bean>
    
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" parent="handlerMappingTemplate" />
    
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" parent="handlerMappingTemplate" />
    
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
    
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/app/" p:suffix=".jsp" />
</beans>

具體的java類代碼也比較簡單
package com.example.aspect;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;


public class LoginCheckInterceptor extends HandlerInterceptorAdapter {

    @Override
    
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        
        System.out.println(
"\n\n\n\n\n"+request);
        
throw new Exception("用戶沒有該操作的權(quán)限!");
    }
    

}



wangchangbing 2009-02-20 15:07 發(fā)表評論
]]>
SpringMVC下的權(quán)限控制http://www.aygfsteel.com/wangbing/archive/2009/02/19/255639.htmlwangchangbingwangchangbingThu, 19 Feb 2009 12:51:00 GMThttp://www.aygfsteel.com/wangbing/archive/2009/02/19/255639.htmlhttp://www.aygfsteel.com/wangbing/comments/255639.htmlhttp://www.aygfsteel.com/wangbing/archive/2009/02/19/255639.html#Feedback0http://www.aygfsteel.com/wangbing/comments/commentRss/255639.htmlhttp://www.aygfsteel.com/wangbing/services/trackbacks/255639.html 1、建立大堆用戶,角色,功能的表,其中最核心的是功能表,這個表每條記錄對應springMVC里面的一個交易函數(shù),后臺可以利用遍歷UrlMapping注釋找到所有的url映射地址,即所有的功能點。
2、利用AOP功能攔截Controller里面的每個函數(shù),獲取當前的request里面的用戶信息,判斷用戶是否具有訪問該函數(shù)的權(quán)限。


表和配置都應該沒有問題,關鍵是AOP的利用。

wangchangbing 2009-02-19 20:51 發(fā)表評論
]]>
Spring2.5基于@Transactional的事物控制http://www.aygfsteel.com/wangbing/archive/2008/12/24/248054.htmlwangchangbingwangchangbingWed, 24 Dec 2008 05:42:00 GMThttp://www.aygfsteel.com/wangbing/archive/2008/12/24/248054.htmlhttp://www.aygfsteel.com/wangbing/comments/248054.htmlhttp://www.aygfsteel.com/wangbing/archive/2008/12/24/248054.html#Feedback2http://www.aygfsteel.com/wangbing/comments/commentRss/248054.htmlhttp://www.aygfsteel.com/wangbing/services/trackbacks/248054.html

wangchangbing 2008-12-24 13:42 發(fā)表評論
]]>
Spring2.5MVC應用實例http://www.aygfsteel.com/wangbing/archive/2008/12/22/247744.htmlwangchangbingwangchangbingMon, 22 Dec 2008 05:40:00 GMThttp://www.aygfsteel.com/wangbing/archive/2008/12/22/247744.htmlhttp://www.aygfsteel.com/wangbing/comments/247744.htmlhttp://www.aygfsteel.com/wangbing/archive/2008/12/22/247744.html#Feedback0http://www.aygfsteel.com/wangbing/comments/commentRss/247744.htmlhttp://www.aygfsteel.com/wangbing/services/trackbacks/247744.html     <context-param>     ...  閱讀全文

wangchangbing 2008-12-22 13:40 發(fā)表評論
]]>
Ext,spring2.5,ibatis完整的例子一個http://www.aygfsteel.com/wangbing/archive/2008/12/20/247496.htmlwangchangbingwangchangbingSat, 20 Dec 2008 08:51:00 GMThttp://www.aygfsteel.com/wangbing/archive/2008/12/20/247496.htmlhttp://www.aygfsteel.com/wangbing/comments/247496.htmlhttp://www.aygfsteel.com/wangbing/archive/2008/12/20/247496.html#Feedback8http://www.aygfsteel.com/wangbing/comments/commentRss/247496.htmlhttp://www.aygfsteel.com/wangbing/services/trackbacks/247496.html
下載地址為:http://www.aygfsteel.com/Files/wangbing/greatwall.rar


wangchangbing 2008-12-20 16:51 發(fā)表評論
]]>
Spring2.5基于Annotation的事物控制問題不好的一個解決辦法http://www.aygfsteel.com/wangbing/archive/2008/10/08/233209.htmlwangchangbingwangchangbingWed, 08 Oct 2008 11:45:00 GMThttp://www.aygfsteel.com/wangbing/archive/2008/10/08/233209.htmlhttp://www.aygfsteel.com/wangbing/comments/233209.htmlhttp://www.aygfsteel.com/wangbing/archive/2008/10/08/233209.html#Feedback0http://www.aygfsteel.com/wangbing/comments/commentRss/233209.htmlhttp://www.aygfsteel.com/wangbing/services/trackbacks/233209.html

    下午發(fā)現(xiàn)的問題,晚上我把userDaouserService的定義移到了dataAccessContext-jdbc.xml后,事物又有效了。看來網(wǎng)友的分析是對的,事物沒有啟動是因為bean的加載的原因。但是這樣的話感覺不是很爽了,一部分是xml文件,一部分是注釋。繼續(xù)找好的辦法搞定這個問題。

    <bean id="userDao" class="com.example.springdemo.dao.impl.UserDAOImpl" />
   
    <bean id="userService" class="com.example.springdemo.service.impl.UserServiceImpl" />

    至于java類中還是保持@Autowired的注釋。



wangchangbing 2008-10-08 19:45 發(fā)表評論
]]>
Spring2.5基于Annotation的事物控制問題http://www.aygfsteel.com/wangbing/archive/2008/10/08/233203.htmlwangchangbingwangchangbingWed, 08 Oct 2008 10:59:00 GMThttp://www.aygfsteel.com/wangbing/archive/2008/10/08/233203.htmlhttp://www.aygfsteel.com/wangbing/comments/233203.htmlhttp://www.aygfsteel.com/wangbing/archive/2008/10/08/233203.html#Feedback0http://www.aygfsteel.com/wangbing/comments/commentRss/233203.htmlhttp://www.aygfsteel.com/wangbing/services/trackbacks/233203.html閱讀全文

wangchangbing 2008-10-08 18:59 發(fā)表評論
]]>
主站蜘蛛池模板: 仁寿县| 电白县| 青州市| 龙南县| 伽师县| 南昌市| 衡东县| 淅川县| 东阳市| 二连浩特市| 许昌市| 江西省| 句容市| 尖扎县| 沙坪坝区| 元朗区| 壤塘县| 定远县| 天柱县| 襄城县| 嘉峪关市| 嘉鱼县| 江达县| 怀宁县| 绥阳县| 敦煌市| 红安县| 四川省| 酉阳| 廊坊市| 武汉市| 咸丰县| 哈密市| 志丹县| 南木林县| 炎陵县| 河源市| 上高县| 长兴县| 临泉县| 互助|