日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

java.lang.ClassCastException:com.sun.proxy$Proxy0無法轉(zhuǎn)換為org.andrea.myexample.myDeclarativeTransactionS

瀏覽:175日期:2024-05-12 15:07:55
(adsbygoogle = window.adsbygoogle || []).push({}); 如何解決java.lang.ClassCastException:com.sun.proxy$Proxy0無法轉(zhuǎn)換為org.andrea.myexample.myDeclarativeTransactionSpring.StudentJDBCTemplate?

選項(xiàng)1,更改您的配置以在接口級(jí)別注入事務(wù):

<aop:config> <aop:pointcut expression='execution(* org.andrea.myexample.myDeclarativeTransactionspring.StudentDAO.create(..))' /> <aop:advisor advice-ref='txAdvice' pointcut-ref='createOperation' /></aop:config>

并獲取該bean作為該接口的實(shí)例:

StudentDAO studentDao = (StudentDAO) context.getBean('studentJDBCTemplate');

選項(xiàng)2,指示代理應(yīng)使用proxy-target-class屬性擴(kuò)展目標(biāo)類:

<aop:config proxy-target-class='true'> ...</aop:config>

第一個(gè)選擇是更清潔的選擇,但是坦率地說,我更喜歡@Transactional在Spring beanXML中使用注釋而不是AOP聲明。有時(shí)很難使后者正確,如果您沒有對(duì)組件進(jìn)行特定的事務(wù)性測(cè)試,則 不一定 會(huì) 發(fā)現(xiàn)事情不正確 。

解決方法

我正在嘗試在Spring Framework應(yīng)用程序中實(shí)現(xiàn)有關(guān)聲明性事務(wù)的本教程,但不起作用,因?yàn)楫?dāng)我嘗試執(zhí)行 MainApp類以測(cè)試應(yīng)用程序行為時(shí),我得到一個(gè)錯(cuò)誤:

http://www.tutorialspoint.com/spring/declarative_management.htm

所以我只有 Student DAO 接口,我只定義了我想要的CRUD方法:

package org.andrea.myexample.myDeclarativeTransactionSpring;import java.util.List;import javax.sql.DataSource;/** Interfaccia che definisce i metodi che implementano le operazioni di CRUD * che vogliamo implementare nel nostro DAO: */public interface StudentDAO { /** * Questo metodo viene usato per inizializzare le risorse del database cioè * la connessione al database: */ public void setDataSource(DataSource ds); /** * Questo metodo serve a creare un record nella tabella Student e nella * tabella Marks: */ public void create(String name,Integer age,Integer marks,Integer year); /** * Questo metodo serve ad elencare tutti i record all’interno della tabella * Studend e della tabella Marks */ public List<StudentMarks> listStudents();}

然后,我有一個(gè) 學(xué)生標(biāo)記 類,代表我的 實(shí)體 要保留在數(shù)據(jù)庫(kù)的2表上:

package org.andrea.myexample.myDeclarativeTransactionSpring;// Rappresenta l’entity:public class StudentMarks { // Proprietà: private Integer age; private String name; private Integer id; private Integer marks; private Integer year; private Integer sid; // Metodi Getter & Setter: public void setAge(Integer age) {this.age = age; } public Integer getAge() {return age; } public void setName(String name) {this.name = name; } public String getName() {return name; } public void setId(Integer id) {this.id = id; } public Integer getId() {return id; } public void setMarks(Integer marks) {this.marks = marks; } public Integer getMarks() {return marks; } public void setYear(Integer year) {this.year = year; } public Integer getYear() {return year; } public void setSid(Integer sid) {this.sid = sid; } public Integer getSid() {return sid; }}

然后,我有類 StudentMarksMapper 實(shí)現(xiàn) 的RowMapper 接口:

package org.andrea.myexample.myDeclarativeTransactionSpring;import java.sql.ResultSet;import java.sql.SQLException;import org.springframework.jdbc.core.RowMapper;/** Classe che implementa l’interfaccia RowMapper. Si tratta di un’interfaccia * usata da JdbcTemplate per mappare le righe di un ResultSet (oggetto che * contiene l’insieme delle righe restituite da una query SQL) riga per riga. * Le implementazioni di questa interfaccia mappano ogni riga su di un oggetto * risultante senza doversi preoccupare della gestione delle eccezioni poichè * le SQLException saranno catturate e gestite dalla chiamata a JdbcTemplate. */public class StudentMarksMapper implements RowMapper<StudentMarks> { /** Implementazione del metodo dell’interfaccia RowMapper che mappa una * specifica riga della tabella su di un oggetto Student * * @param Un oggetto ResultSet contenente l’insieme di tutte le righe * restituite dalla query * * @param L’indice che indentifica una specifica riga * * @return Un nuovo oggetto Student rappresentante la riga selezionata * all’interno dell’oggetto ResultSet * * @see org.springframework.jdbc.core.RowMapper#mapRow(java.sql.ResultSet,int) */ public StudentMarks mapRow(ResultSet rs,int rowNum) throws SQLException {StudentMarks studentMarks = new StudentMarks();studentMarks.setId(rs.getInt('id'));studentMarks.setName(rs.getString('name'));studentMarks.setAge(rs.getInt('age'));studentMarks.setSid(rs.getInt('sid'));studentMarks.setMarks(rs.getInt('marks'));studentMarks.setYear(rs.getInt('year'));return studentMarks; }}

在它旁邊的是 StudentDAO 接口的 StudentJDBCTemplate 類:

package org.andrea.myexample.myDeclarativeTransactionSpring;import java.util.List;import javax.sql.DataSource;import org.springframework.dao.DataAccessException;import org.springframework.jdbc.core.JdbcTemplate;/** * Classe che fornisce l’implementazione per il nostro DAO le cui funzionalità * di CRUD sono state definite tramite l’interfaccia StudentDAO */public class StudentJDBCTemplate implements StudentDAO { // Utility per l’accesso alla sorgente dati private JdbcTemplate jdbcTemplateObject; /** * Metodo Setter per l’Injection della dipendenza relativa alla sorgente * dati. Tale metodo inoltre costruisce anche l’oggetto istanza di * JdbcTemplate usato per interagire con i dati nel database. * * @param la sorgente dati */ public void setDataSource(DataSource dataSource) {this.jdbcTemplateObject = new JdbcTemplate(dataSource); } /** * Metodo relativo all’operazione di CREATE che inserisce un nuovo record * all’interno della tabella Student ed un correlato nuovo record nella * tabella Marks. */ public void create(String name,Integer year) {try { // Query che inserisce nome ed età nella tabella Student: String SQL1 = 'insert into Student (name,age) values (?,?)'; // Esegue la query passandogli anche i valori effettivi da inserire: jdbcTemplateObject.update(SQL1,name,age); // Seleziona l’ultimo studente inserito nella tabella Marks: String SQL2 = 'select max(id) from Student'; // Esegue la query e mette il risultato (l’ID) in sid: int sid = jdbcTemplateObject.queryForInt(SQL2); /** * Query che inserisce un nuovo record nella tabella Marks. Il * record rappresenta il voto per l’ultimo studente inserito nella * tabella Student: */ String SQL3 = 'insert into Marks(sid,marks,year) ' + 'values (?,?,?)'; // Esegue la query passandogli anche i valori effettivi da inserire: jdbcTemplateObject.update(SQL3,sid,year); System.out.println('Created Name = ' + name + ',Age = ' + age); // SIMULA UNA RuntimeExceptio: throw new RuntimeException('Simulazione di una condizione d’errore');} catch (DataAccessException e) { // GESTIONE DELL’ECCEZIONE System.out.println('Errore nella creazione dei record,esegue rollback'); throw e;} } /** * Metodo relativo all’operazione di READ che recupera la lista degli * studenti e dei relativi voti * * @return La lista di oggetti che rappresentano uno studente ed i suoi voti * correlati */ public List<StudentMarks> listStudents() {/** * Query che estrae la lista di tutti i record nella tabella Student e * che per ogni record in tale tabella estrae i relativi record * correlati nella tabella Marks */String SQL = 'select * from Student,Marks where Student.id=Marks.sid';/** * Ottengo la lista degli oggetti StudentMarks,corrispondenti ognuno ad * un record della tabella Student con i correlati vori rappresentati * dai record della tabella Marks,invocando il metodo query * sull’oggetto JdbcTemplate passandogli i seguenti parametri. * * @param La query per creare il preparated statement * @param Un oggetto che implementa RowMapper che viene usato per *mappare una singola riga della tabella su di un oggetto Java */List<StudentMarks> studentMarks = jdbcTemplateObject.query(SQL,new StudentMarksMapper());return studentMarks; }}

然后,這是 MainApp 類來測(cè)試應(yīng)用程序:

package org.andrea.myexample.myDeclarativeTransactionSpring;import java.util.List;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;// Classe principale:public class MainApp { public static void main(String[] args) {/** * Crea il contesto in base alle impostazioni dell’applicazione definite * nel file Beans.xml */ApplicationContext context = new ClassPathXmlApplicationContext('Beans.xml');/** * Recupera un bean avente nel file di * configurazione Beans.xml */StudentJDBCTemplate studentJDBCTemplate = (StudentJDBCTemplate) context.getBean('studentJDBCTemplate');System.out.println('------Creazione dei record--------');// Creo i record nelle tabelle Studend e Marks:studentJDBCTemplate.create('Zara',11,99,2010);studentJDBCTemplate.create('Nuha',20,97,2010);studentJDBCTemplate.create('Ayan',25,100,2011);System.out.println('------Elenca tutti i record--------');// Recupera la lista degli studenti con i voti ad essi associati:List<StudentMarks> studentMarks = studentJDBCTemplate.listStudents();for (StudentMarks record : studentMarks) { // e li stampa System.out.print('ID : ' + record.getId()); System.out.print(',Name : ' + record.getName()); System.out.print(',Marks : ' + record.getMarks()); System.out.print(',Year : ' + record.getYear()); System.out.println(',Age : ' + record.getAge());} }}

最后,這是我的 Beans.xml 配置文件:

<?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:tx='http://www.springframework.org/schema/tx' xmlns:aop='http://www.springframework.org/schema/aop' xsi:schemaLocation='http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd'> <!-- Initializazione della sorgente dati: --> <bean class='org.springframework.jdbc.datasource.DriverManagerDataSource'><property name='driverClassName' value='com.mysql.jdbc.Driver' /><property name='url' value='jdbc:mysql://localhost:3306/SpringTestDb' /><property name='username' value='root' /><property name='password' value='aprile12' /> </bean> <tx:advice transaction-manager='transactionManager'><tx:attributes> <tx:method name='create' /></tx:attributes> </tx:advice> <aop:config><aop:pointcut expression='execution(* org.andrea.myexample.myDeclarativeTransactionSpring.StudentJDBCTemplate.create(..))' /><aop:advisor advice-ref='txAdvice' pointcut-ref='createOperation' /> </aop:config> <!-- Inizializzazione del Transaction Manager: --> <bean class='org.springframework.jdbc.datasource.DataSourceTransactionManager'><property name='dataSource' ref='dataSource' /> </bean> <!-- Definizione del bean che rappresenta il DAO studentJDBCTemplate: --> <bean class='org.andrea.myexample.myDeclarativeTransactionSpring.StudentJDBCTemplate'><property name='dataSource' ref='dataSource' /> </bean></beans>

問題是,當(dāng)我嘗試運(yùn)行 MainApp 類時(shí),出現(xiàn)以下錯(cuò)誤信息:

INFO: Loaded JDBC driver: com.mysql.jdbc.DriverException in thread 'main' java.lang.ClassCastException: com.sun.proxy.$Proxy0 cannot be cast to org.andrea.myexample.myDeclarativeTransactionSpring.StudentJDBCTemplate at org.andrea.myexample.myDeclarativeTransactionSpring.MainApp.main(MainApp.java:22)

在此錯(cuò)誤消息中,說問題出在MainApp類的第22行上……就是當(dāng)我嘗試獲取ID =“ studentJDBCTemplate的bean:

StudentJDBCTemplate studentJDBCTemplate = (StudentJDBCTemplate) context.getBean('studentJDBCTemplate');

問題出在哪里?我該如何解決?

特納克斯

安德魯

標(biāo)簽: java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲专区一区| 99成人在线| 91九色综合| 日本亚州欧洲精品不卡| 日av在线不卡| 男女性色大片免费观看一区二区 | 日韩在线视频一区二区三区| 久久亚洲欧洲| 亚洲精品欧美| 日本高清久久| 欧美一区激情| 亚洲精品综合| 日韩va亚洲va欧美va久久| 91欧美极品| 国产精品igao视频网网址不卡日韩| 欧美一级全黄| 国产精品视频一区二区三区| 欧美黄色精品| 伊人久久视频| 午夜免费一区| 免费在线观看不卡| 日韩av中文字幕一区| 老司机精品视频网| 国产自产自拍视频在线观看| 香蕉久久99| 蜜臀av性久久久久蜜臀aⅴ四虎 | 亚洲一区免费| 日韩中文av| 国产精品久久久久久模特| 免费日韩成人| 日韩网站中文字幕| 亚洲一区二区三区高清| 日韩中文一区二区| 精品一区二区三区在线观看视频 | 国产一区二区三区日韩精品| 色88888久久久久久影院| 影音国产精品| 天堂av一区| 精品中文字幕一区二区三区 | 精品久久影院| 精品国模一区二区三区| 中文一区一区三区免费在线观| 青草av.久久免费一区| 嫩草伊人久久精品少妇av杨幂| 婷婷综合六月| 中文字幕成人| 精品久久久久中文字幕小说| 亚洲国产综合在线看不卡| 免费成人av在线播放| 欧美极品中文字幕| 欧美日韩国产免费观看| 日韩精品欧美大片| 在线精品亚洲欧美日韩国产| 欧美综合国产| 国产福利91精品一区二区| 亚洲一区二区三区免费在线观看| 国产精品大片免费观看| 亚洲国产专区| 国产精品magnet| 亚洲免费观看| 国语精品一区| 亚洲精品国产精品粉嫩| 国产精品99一区二区三| 亚洲制服欧美另类| 色网在线免费观看| 日韩av成人高清| 日韩在线短视频| 日韩和欧美一区二区| 性欧美videohd高精| 日本成人在线视频网站| 深夜福利视频一区二区| 日本成人手机在线| 亚洲特级毛片| 久久精品午夜| 日韩和欧美一区二区| 不卡在线一区| 福利一区在线| 欧美亚洲人成在线| 中文久久精品| а√天堂8资源中文在线| 日韩av不卡在线观看| 欧美高清一区| 国产成人77亚洲精品www| 亚洲一区二区网站| 亚洲一级少妇| 欧美精品成人| 亚洲免费专区| 99精品99| 欧美日韩a区| 亚洲一区久久| 久久影视一区| 久久不见久久见免费视频7| 男女激情视频一区| 午夜久久福利| 97人人精品| 久久久精品国产**网站| 日欧美一区二区| 最新国产拍偷乱拍精品| 99精品在线| 中文字幕成在线观看| 老牛国内精品亚洲成av人片| 午夜久久av | 亚洲作爱视频| 久久九九精品| 超碰超碰人人人人精品| 精品色999| 国产精品第一国产精品| 日韩精品亚洲专区| 亚洲资源av| 天堂资源在线亚洲| 五月天av在线| 国产一区二区三区不卡视频网站 | 久久99青青| 欧美日本久久| 日韩精品亚洲aⅴ在线影院| 日韩中文字幕区一区有砖一区| 在线看片国产福利你懂的| 国产精品igao视频网网址不卡日韩| 日韩激情中文字幕| 91精品麻豆| 久久黄色影视| 国产欧美啪啪| 91伊人久久| 日韩免费精品| 日韩精品免费观看视频| 日韩激情综合| 欧美精品中文| 国产精品一在线观看| 国产日产一区| 久久av综合| 国产一区二区三区免费在线 | 欧美综合精品| 久久黄色影视| 免费在线亚洲欧美| 国产精品日韩精品在线播放| 欧美一区激情| 久久精品国产一区二区| 国产精品免费99久久久| 国产精品久久久久久久久久齐齐 | av不卡在线| 日韩影院在线观看| 日韩国产欧美在线播放| 国产日本亚洲| 国产精品免费精品自在线观看| 嫩草伊人久久精品少妇av杨幂| 麻豆91在线播放| 日本不卡免费高清视频在线| 91精品啪在线观看国产18| 一区免费视频| 日韩一二三区在线观看| 国产美女精品视频免费播放软件| 国产精品一级| 国产成人精品一区二区三区免费| 国产乱码午夜在线视频| 性欧美xxxx免费岛国不卡电影| 国产精品试看| 日韩va亚洲va欧美va久久| 久久91视频| 99成人超碰| 蜜臀久久99精品久久久久宅男 | 久久精品中文| 亚洲资源av| 国产精品一级| 日韩在线观看| 久久国产精品久久久久久电车| 三级久久三级久久久| 久久99久久人婷婷精品综合| 日韩高清不卡| 亚洲免费毛片| 91青青国产在线观看精品| 夜久久久久久| 国产乱码精品一区二区亚洲| 正在播放日韩精品| 免费视频最近日韩| 国产一区二区三区不卡av| 欧美日韩国产一区二区三区不卡| 中文字幕成人| 日本一二区不卡| 久久不射中文字幕| 国产精品theporn| 亚洲91视频| 亚洲精品在线a| 国产一区调教| 中文字幕一区二区三区四区久久 | 日韩久久99| 最新中文字幕在线播放| 亚洲五月综合| 色网在线免费观看| 日韩一区二区三区精品| 亚洲日本网址| 日韩精品视频在线看| 成人午夜网址| 三级亚洲高清视频| 国产999精品在线观看| 男女男精品视频网| 在线看片福利| 国产欧美一区二区精品久久久 | 亚洲视频www| 精品一区二区三区中文字幕视频| 在线精品福利|