03_Spring
15956 ワード
今日の内容SpringフレームワークのAOPの注釈の仕方 SpringフレームのJDBCテンプレート Springフレームワークの事務管理 ケース1:SpringフレームワークのAOP技術を用いてDAO層の機能を強化するSpringフレームワークのAOP技術を用いてDAO層の機能を強化 技術分析その:SpringフレームワークのAOP技術(注釈方式)1,ステップ1:JavaWEBプロジェクト(本例名Springフレームワーク開発の基本開発パッケージを先に導入 Springフレームワークを再導入したAOPの開発パッケージ springの伝統AOPの開発パッケージ aspectJの開発パッケージ 2,ステップ2:Springのプロファイルを作成し,具体的なAOPのschema制約を導入する
3,ステップ3:パケット構造の作成、特定のインタフェースと実装クラスの作成 com.itheima.demo1 CustomerDao--インターフェイス CustomerDaoImpl--実装クラス 4,ステップ4:Springにターゲットクラスを配置する@Aspect--切麺類を定義する注記 通知タイプ(注記のパラメータは切り込み点の式) @Before--前置き通知 @AfterReturing--後置通知 @Around--周回通知 @After--最終通知 @AfterThrowing--異常投げ出し通知 ②具体的なコードは以下の通り
6,手順6:プロファイルに切麺類を定義する
例:注釈を用いるAspectJのAOP開発1を完了し、JavaWEBプロジェクト(本例名は
4、クラスとインタフェースは以下の通りです.
5,注記を使用した切麺類
6,srcディレクトリの下に新規作成
7、テストクラスは以下の通りです.
テクニカル分析の通知タイプ通知タイプ @Before--前置き通知 @AfterReturing--後置通知 @Around--オービット通知(ターゲットメソッドはデフォルトでは実行されず、手動で実行する必要がある) @After--最終通知 @AfterThrowing--異常投げ出し通知 共通の切り込み点の配置 @Pointcutで共通の切り込み点を定義する
例:通知タイプ
ケース2:Springフレームワークのトランザクション管理が完了した場合
需要分析1つの振込機能を完了するには、トランザクションの管理が必要であり、Springのトランザクション管理で完了する SpringフレームワークのJDBCテンプレート技術
技術分析のSpringフレームワークのJDBCテンプレート技術概要Springフレームワークにはプログラミングを簡略化するための永続層のテンプレートクラスが多数用意されており、テンプレートクラスを使用するとプログラムが簡単になる JDBCテンプレート、Springフレームワーク提供 SpringフレームはHibernateフレームを統合でき、テンプレートクラスも提供されている
技術分析のプレゼンテーションJDBCのテンプレートクラス1、ステップ1:データベースのテーブル構造を作成する
2,開発したjarパッケージを導入するIOC基本のjarバッグ6個を先に導入 Spring-aopのjarパッケージを再導入 最後にJDBCテンプレートに必要なjarパッケージを導入 MySQLデータベースのドライバパッケージ本例ではmysqlを使用する: Spring-jdbc.jar Spring-tx.jar
3,導入
4,テストコードの作成(自分でnewオブジェクトを作成する方法)
技術分析ではSpringフレームワークを用いてテンプレートクラス1を管理するが,先ほど作成したコードはnew方式を用いており,これらのクラスをSpringフレームワークに渡して管理すべきである.2、修正の手順は以下の通りです.手順1:Spring管理内蔵接続プール 手順2:Spring管理テンプレート類 手順3:試験手順作成
技術分析のSpringフレームワークはオープンソースの接続プール1を管理し、DBPP接続プールを管理するDBPPの2つのjarパッケージを先に導入し、 プロファイル作成
2,C 3 P 0接続プールの管理C 3 P 0のjarパッケージを先に導入し、 プロファイル作成
技術分析のSpringフレームワークのJDBCテンプレートの簡単な操作添削検査の操作
技術分析のSpringフレームワークのトランザクション管理
テクノロジー分析のトランザクションの回顧トランザクション:論理上の一連のオペレーションを指し、そのトランザクションを構成する各実行ユニットは、一緒に成功するか、一緒に失敗するかのどちらかである. 事務の特性 原子性 整合性 隔離性 耐久性 隔離性を考慮しないと安全性に問題が生じる 読解問題:①汚読:②繰り返し不可:③虚読: 書き込み問題:①紛失更新: セキュリティ問題の解決方法 読解問題解決、データベース独立性レベル設定 書き込み問題解決は悲観ロックと楽観ロックで解決可能
day37_aop
)を作成し,具体的な開発のjarパッケージを導入するspring-aop-4.2.4.RELEASE.jar
com.springsource.org.aopalliance-1.0.0.jar
com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
spring-aspects-4.2.4.RELEASE.jar
3,ステップ3:パケット構造の作成、特定のインタフェースと実装クラスの作成
5,手順5:切麺類を定義①切面と通知を追加する注記 @Aspect
public class MyAspectAnno {
@Before(value="execution(public void com.itheima.demo1.CustomerDaoImpl.save())")
public void log(){
System.out.println(" ...");
}
}
6,手順6:プロファイルに切麺類を定義する
7,ステップ7:プロファイルで自動エージェントを開く
8、テスト完了 @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class Demo1 {
@Resource(name="customerDao")
private CustomerDao customerDao;
@Test
public void run1(){
customerDao.save();
customerDao.update();
}
}
例:注釈を用いるAspectJのAOP開発1を完了し、JavaWEBプロジェクト(本例名は
day37_aop
)2を新規作成し、jarパッケージをインポートし、上記の手順を参照して、本例はすべてのjarパッケージを以下のようにインポートする:com.springsource.org.aopalliance-1.0.0.jar com.springsource.org.apache.commons.logging-1.1.1.jar com.springsource.org.apache.log4j-1.2.15.jar com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar spring-aop-4.2.4.RELEASE.jar spring-aspects-4.2.4.RELEASE.jar spring-beans-4.2.4.RELEASE.jar spring-context-4.2.4.RELEASE.jar spring-core-4.2.4.RELEASE.jar spring-expression-4.2.4.RELEASE.jar spring-test-4.2.4.RELEASE.jar
3、srcディレクトリの下にlog 4 jを導入する.properties,spring以前のノートを参照### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c\:mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
log4j.rootLogger=info, stdout
4、クラスとインタフェースは以下の通りです.
package com.huachao.demo1;
public interface CustomerDao {
public void save();
public void update();
}
public class CustomerDaoImp implements CustomerDao {
@Override
public void save() {
System.out.println(" ...");
}
@Override
public void update() {
System.out.println(" ...");
}
}
5,注記を使用した切麺類
package com.huachao.demo1;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
@Aspect
public class MyAspectJAnnotation {
@Before(value="execution(* com.huachao.demo1.CustomerDaoImp.save(..))")
public void log()
{
System.out.println(" ...");
}
}
6,srcディレクトリの下に新規作成
applicationContext.xml
ファイル
7、テストクラスは以下の通りです.
package com.huachao.demo1;
import javax.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class Demo1 {
@Resource(name="customerDao")
public CustomerDao customerDao;
@Test
public void Run1()
{
customerDao.save();
customerDao.update();
}
}
テクニカル分析の通知タイプ
@Aspect
public class MyAspectAnno {
@Before(value="MyAspectAnno.fn()")
public void log(){
System.out.println(" ...");
}
@Pointcut(value="execution(public void com.itheima.demo1.CustomerDaoImpl.save())")
public void fn(){}
}
例:通知タイプ
package com.huachao.demo1;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
@Aspect
public class MyAspectJAnnotation {
/*
* :@Before ( )
*/
//@Before(value="execution(* com.huachao.demo1.CustomerDaoImp.save(..))")
/*
*
*/
@Before(value="MyAspectJAnnotation.fn()")
public void log()
{
System.out.println(" ...");
}
/**
* : ,
*/
//@After(value="execution(* com.huachao.demo1.CustomerDaoImp.save(..))")
/*
*
*/
@After(value="MyAspectJAnnotation.fn()")
public void after()
{
System.out.println(" ...");
}
/**
*
* ,
*/
@Pointcut(value="execution(* com.huachao.demo1.CustomerDaoImp.save(..))")
public void fn(){}
/**
* ( , )
* @param joinPoint
*/
@Around(value="MyAspectJAnnotation.fn()")
public void around(ProceedingJoinPoint joinPoint)
{
System.out.println(" ...");
try {
joinPoint.proceed();
} catch (Throwable e) {
e.printStackTrace();
}
System.out.println(" ...");
}
}
ケース2:Springフレームワークのトランザクション管理が完了した場合
需要分析
技術分析のSpringフレームワークのJDBCテンプレート技術概要
JdbcTemplate
HibernateTemplate
技術分析のプレゼンテーションJDBCのテンプレートクラス1、ステップ1:データベースのテーブル構造を作成する
create database spring_day03;
use spring_day03;
create table t_account(
id int primary key auto_increment,
name varchar(20),
money double
);
2,開発したjarパッケージを導入する
com.springsource.org.apache.commons.logging-1.1.1.jar com.springsource.org.apache.log4j-1.2.15.jar spring-beans-4.2.4.RELEASE.jar spring-context-4.2.4.RELEASE.jar spring-core-4.2.4.RELEASE.jar spring-expression-4.2.4.RELEASE.jar
spring-aop-4.2.4.RELEASE.jar
mysql-connector-java-5.1.7-bin.jar
spring-jdbc-4.2.4.RELEASE.jar
spring-tx-4.2.4.RELEASE.jar
3,導入
applicationContext.xml
およびlog4j.properties
プロファイル4,テストコードの作成(自分でnewオブジェクトを作成する方法)
@Test
public void Run1()
{
// Spring , ,
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///spring_day03");
dataSource.setUsername("root");
dataSource.setPassword("root");
//
JdbcTemplate template = new JdbcTemplate();
//
template.setDataSource(dataSource);
//
template.update("insert into t_account values (null,?,?)"," ",1000);
}
技術分析ではSpringフレームワークを用いてテンプレートクラス1を管理するが,先ほど作成したコードはnew方式を用いており,これらのクラスをSpringフレームワークに渡して管理すべきである.2、修正の手順は以下の通りです.
package com.huachao.demo1;
import javax.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class Demo2 {
@Resource(name="jdbcTemplate")
private JdbcTemplate template;
@Test
public void Run1()
{
template.update("insert into t_account values (null,?,?)"," 2",1000);
}
}
技術分析のSpringフレームワークはオープンソースの接続プール1を管理し、DBPP接続プールを管理する
day35_Spring01\ \spring-framework-3.0.2.RELEASE-dependencies\org.apache.commons\com.springsource.org.apache.commons.dbcp\1.2.2.osgi
とday35_Spring01\ \spring-framework-3.0.2.RELEASE-dependencies\org.apache.commons\com.springsource.org.apache.commons.pool\1.5.3
ディレクトリの下com.springsource.org.apache.commons.dbcp-1.2.2.osgi.jar
com.springsource.org.apache.commons.pool-1.5.3.jar
2,C 3 P 0接続プールの管理
day35_Spring01\ \spring-framework-3.0.2.RELEASE-dependencies\com.mchange.c3p0\com.springsource.com.mchange.v2.c3p0\0.9.1.2
ディレクトリ下com.springsource.com.mchange.v2.c3p0-0.9.1.2.jar
技術分析のSpringフレームワークのJDBCテンプレートの簡単な操作
package com.huachao.demo1;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import javax.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class Demo2 {
@Resource(name="jdbcTemplate")
private JdbcTemplate template;
/**
*
*/
@Test
public void Run1()
{
template.update("insert into t_account values (null,?,?)"," 4",1000);
}
/**
*
*/
@Test
public void Run2()
{
template.update("update t_account set name=? where id=?"," ",3);
}
/**
*
*/
@Test
public void Run3()
{
template.update("delete from t_account where id=?",4);
}
/**
*
*/
@Test
public void Run4()
{
Account ac = template.queryForObject("select * from t_account where id=?", new BeanMapper(), 1);
System.out.println(ac.toString());
}
/**
*
*/
@Test
public void Run5()
{
List list = template.query("select * from t_account", new BeanMapper());
System.out.println(list);
}
class BeanMapper implements RowMapper{
@Override
public Account mapRow(ResultSet rs, int rowNum) throws SQLException {
Account account = new Account();
account.setId(rs.getInt("id"));
account.setName(rs.getString("name"));
account.setMoney(rs.getDouble("money"));
return account;
}
}
}
技術分析のSpringフレームワークのトランザクション管理
テクノロジー分析のトランザクションの回顧