Springメモの整理
43922 ワード
IOC概念解析
iocシンプルコード例IMessge.java
使用するカバンと書類
書類に包む
説明
appication Contect.xml
Springプロファイル
spring-context-3.2.0.M 1.jar
主にbean工場の実現類を提供します.工場は中にありますが、インターフェースはspring-beans-3.0.M 1.jarの中にあります.
spring-beans-3.20.M 1.jar
bean工場は中にあります
spring-coree-3.0.M 1.jar
Springコアバッグ
spring-expressition n-3.2.0.M 1.jar
spring表現に対応する
spring-asm-3.20.M 1.jar
いくつかのクラス(バイトコードを動的に生成するクラス)を動的に生成する.
commons-loging-11.jar
依存パケット(公的ログパッケージ)
spring配置ファイル:appication Contact.xml
セット方法注入例UserManager.java
UserManager.java
UserAction.javaMainClass.java A.java appication Contect.xml MainClass.java 注意事項 a)A.javaUserManager.java UserAction.java appication Contect.xml MainClass.java appication Contect.xml UserAction.java appication Contect.xml UserManager.java UserService.java UserAction.java MainClass.java 懸念点分離 静的代理 a)MeInterface.javaDynamicProxyFactory.java appication Contect.xml ダイナミックエージェント 使うカバン appication Contect.xml AspClass.java SpringのAsppectJを用いて作成された動的エージェント 切麺類AspClassを使わなくてもいい a)サーヴァント01Arond、AfterThrowingなど他のAdvice a)Me.java b)AspClass.javaAspClass.java appication Contect.xml 使うカバン appication Contect.xml 事務伝播特性 使うカバン UserAction.java web.xml BaseDao.java
怠惰なロードポリシーに対応する
iocシンプルコード例IMessge.java
public interface IMessage {
public abstract String getMessage();
}
Message.javapublic class Message implements IMessage {
@Override
public String getMessage() {
return "Hello World!";
}
}
NewMessage.javapublic class NewMessage implements IMessage {
@Override
public String getMessage() {
return "Hello Every One!";
}
}
message.properties 1=com.alyshen.spring.Message
2=com.alyshen.spring.NewMessage
Message Factory.java public class MessageFactory {
public static IMessage create(String key) {
// if ("1".equals(key)) {
// //
// return new Message();
// }
//
//
ResourceBundle bundle = ResourceBundle.getBundle("message");
String _class = bundle.getString(key);
try {
return (IMessage) Class.forName(_class).newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
}
MainClass.java public class MainClass {
public static void main(String[] args) {
// Message
// Message msg = new Message();
// Message
// IMessage msg = new Message();
IMessage msg = MessageFactory.create("1");
System.out.println(msg.getMessage());
msg = MessageFactory.create("2");
System.out.println(msg.getMessage());
}
}
Spring環境配置及びIOC工場応用使用するカバンと書類
書類に包む
説明
appication Contect.xml
Springプロファイル
spring-context-3.2.0.M 1.jar
主にbean工場の実現類を提供します.工場は中にありますが、インターフェースはspring-beans-3.0.M 1.jarの中にあります.
spring-beans-3.20.M 1.jar
bean工場は中にあります
spring-coree-3.0.M 1.jar
Springコアバッグ
spring-expressition n-3.2.0.M 1.jar
spring表現に対応する
spring-asm-3.20.M 1.jar
いくつかのクラス(バイトコードを動的に生成するクラス)を動的に生成する.
commons-loging-11.jar
依存パケット(公的ログパッケージ)
spring配置ファイル:appication Contact.xml
スプリングを使ったbean工場public class MainClass {
public static void main(String[] args) {
// spring bean
BeanFactory factory = new ClassPathXmlApplicationContext(
"applicationContext.xml");
//
// BeanFactory factory = new ClassPathXmlApplicationContext("app*.xml");
IMessage msg = (IMessage) factory.getBean("msg1");
System.out.println(msg.getMessage());
// bean
msg = MessageFactory.create("2");
System.out.println(msg.getMessage());
}
}
Spring依存注入の基本的な方法セット方法注入例UserManager.java
public class UserManager {
// set
private String driverCalss;
private String url;
private String username;
private String password;
public void addUser() {
System.out.println(this.toString());
System.out.println(" _ !");
}
public void setDriverCalss(String driverCalss) {
this.driverCalss = driverCalss;
}
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
public void setUrl(String url) {
this.url = url;
}
@Override
public String toString() {
return "UserManager [driverCalss=" + driverCalss + ", url=" + url
+ ", username=" + username + ", password=" + password + "]";
}
}
UserAction.javapublic class UserAction {
private UserManager manager = null;
public void setManager(UserManager manager) {
System.out.println(" manager set !");
this.manager = manager;
}
public String execute() {
this.manager.addUser();
return "success";
}
}
spring配置ファイル:appication Contact.xml
MainClass.java public static void main(String[] args) {
// spring bean
BeanFactory factory = new ClassPathXmlApplicationContext(
"applicationContext.xml");
// BeanFactory factory = new ClassPathXmlApplicationContext("app*.xml");
UserAction ua = (UserAction) factory.getBean("userAction");
System.out.println(ua.execute());
}
Scrope属性とBenFactoryAwareインターフェースUserManager.java
public class UserManager {
// set
private String driverCalss;
private String url;
private String username;
private String password;
public void addUser() {
System.out.println(" _ !");
}
// set get
……
}
UserAction.java/**
* BeanFactoryAware
*/
public class UserAction implements BeanFactoryAware {
private UserManager manager = null;
public void setManager(UserManager manager) {
// System.out.println(" manager set !");
this.manager = manager;
}
public String execute() {
// bean ,
// BeanFactory factory =
// new ClassPathXmlApplicationContext("applicationcontext.xml");
// :
//
manager = (UserManager) factory.getBean("userManager");
System.out.println(manager);
this.manager.addUser();
return "success";
}
BeanFactory factory = null;
@Override
public void setBeanFactory(BeanFactory factory) throws BeansException {
// TODO Auto-generated method stub
this.factory = factory;
}
}
appication Contect.xml
MainClass.javapublic static void main(String[] args) {
// UserAction userAction = new UserAction();
// UserManager manager = new UserManager();
// userAction.setManager(manager);
// spring bean
// BeanFactory factory = new ClassPathXmlApplicationContext("app*.xml");
BeanFactory factory = new ClassPathXmlApplicationContext(
"applicationcontext.xml");
UserAction ua = (UserAction) factory.getBean("userAction");
System.out.println(ua);
System.out.println(ua.execute());
ua = (UserAction) factory.getBean("userAction");
System.out.println(ua);
System.out.println(ua.execute());
ua = (UserAction) factory.getBean("userAction");
System.out.println(ua);
System.out.println(ua.execute());
}
id_name_ref(bean、local、parent)などの属性の使い方
MainClass.java /**
* BeanFactory factory = new
* ClassPathXmlApplicationContext("applicationContext02.xml");
*
* factory ( )
* BeanFactory fay = new XmlBeanFactory( newClassPathResource(
* "applicationContext.xml"), factory );
*/
セットメソッドに集合属性を注入するUserAction.java
public class UserAction {
public List list = null;
public Set set = null;
public Map map = null;
public Properties props = null;
public void setList(List list) {
this.list = list;
}
public void setSet(Set set) {
this.set = set;
}
public void setMap(Map map) {
this.map = map;
}
public void setProps(Properties props) {
this.props = props;
}
}
appication Contect.xml
dfdsf
155.54
1115
true
jdbc.mysql.Driver
root
654321
jdbc:mysql://localhost:3306/mydb
public static void main(String[] args) {
BeanFactory factory = new ClassPathXmlApplicationContext(
"applicationContext.xml");
UserAction userAction = (UserAction) factory.getBean("userAction");
System.out.println("---------------list------------");
for (Object o : userAction.list) {
System.out.println(o);
}
System.out.println("---------------set------------");
for (Object o : userAction.set) {
System.out.println(o);
}
System.out.println("----------------map-----------");
for (Iterator iter = userAction.map.entrySet().iterator(); iter
.hasNext();) {
System.out.println(iter.next());
}
for (Object key : userAction.map.keySet()) {
System.out.println(key + ":" + userAction.map.get(key));
}
System.out.println("--------------props-------------");
Properties prop = userAction.props;
System.out.println(prop.get("driverClass"));
System.out.println(prop.get("username"));
System.out.println(prop.get("password"));
System.out.println(prop.get("url"));
}
構造注入及び注意事項public class A {
private int id;
private String username;
private String password;
private char sex;
private Date birthday;
@Override
public String toString() {
return "A [id=" + id + ", username=" + username + ", password="
+ password + ", sex=" + sex + ", birthday=" + birthday + "]";
}
public A(int id, String username, String password, char sex, Date birthday) {
super();
this.id = id;
this.username = username;
this.password = password;
this.sex = sex;
this.birthday = birthday;
}
// set、get
……
}
public static void main(String[] args) {
BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
A a = (A) factory.getBean("a");
System.out.println(a.toString());
}
public class A {
private B b;
public void setB(B b) {
this.b = b;
}
/**
*
*/
public A(B b) {
super();
this.b = b;
}
/**
*
*/
public A() {
super();
}
}
b)B.javapublic class B {
private A a;
public void setA(A a) {
this.a = a;
}
public B(A a) {
super();
this.a = a;
}
public B() {
super();
}
}
c)appication Contect.xml
自動注入及び注意事項public class UserManager {
public void addUser() {
System.out.println(" !");
}
}
public class UserAction {
private UserManager manager = null;
/**
*
*/
public UserAction(UserManager manager) {
super();
this.manager = manager;
}
/**
* set
*/
public void setManager(UserManager manager) {
System.out.println(" manager set !");
this.manager = manager;
}
public String execute() {
System.out.println(manager);
manager.addUser();
return "success";
}
}
public static void main(String[] args) {
BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
UserAction ua = (UserAction) factory.getBean("userAction");
System.out.println(ua);
System.out.println(ua.execute());
}
注解による注入
public class UserAction {
@Resource
private UserManager manager = null;
//Set
// @Resource
// public void setManager(UserManager manager) {
// System.out.println(" manager set !");
// this.manager = manager;
// }
public String execute() {
System.out.println(manager);
this.manager.addUser();
return "success";
}
}
Spring自動スキャンコンポーネント
@Repository("uManager")
public class UserManager {
public void addUser() {
System.out.println(" User !");
}
}
@Service("uService")
public class UserService {
@Resource(name = "uManager")
private UserManager manager;
public void service() {
System.out.println(" Service");
manager.addUser();
}
}
@Controller("uAction")
//@Scope("prototype") //
public class UserAction {
@Resource(name = "uService")
private UserService service;
public String execute() {
System.out.println(" Action");
service.service();
return "success";
}
}
public static void main(String[] args) {
BeanFactory factory = new ClassPathXmlApplicationContext(
"applicationContext.xml");
// UserAction ua = (UserAction) factory.getBean("userAction");
UserAction ua = (UserAction) factory.getBean("uAction");
System.out.println(ua);
ua = (UserAction) factory.getBean("uAction");
System.out.println(ua);
ua = (UserAction) factory.getBean("uAction");
System.out.println(ua);
System.out.println(ua.execute());
}
懸念点分離と静的エージェントMe.java
@Component
public class Me {
@Resource
private Servant servant;
public void dowork() {
makeBeds();//
dress();//
haveAMeal();//
System.out.println(" ……");//
haveAMeal();//
makeBeds();//
undress();//
}
//
private void makeBeds() {
System.out.println(" ");
}
private void dress() {
System.out.println(" ");
}
private void haveAMeal() {
System.out.println(" ");
}
private void undress() {
System.out.println(" ");
}
}
public interface MeInterface {
public abstract void dowork();
}
b)Me.java@Component("me")
public class Me implements MeInterface {
@Override
public void dowork() {
System.out.println(" ……");//
}
}
c)Servant.java@Component("ser")
public class Servant {
public void work1() {
this.makeBeds();
this.dress();
this.haveAMeal();
}
public void work2() {
this.haveAMeal();
this.puChuang();
this.undress();
}
public void makeBeds() {
System.out.println(" ");
}
public void dress() {
System.out.println(" ");
}
public void haveAMeal() {
System.out.println(" ");
}
public void undress() {
System.out.println(" ");
}
public void puChuang() {
System.out.println(" ");
}
}
d)MyProxy.java@Component
public class MyProxy implements MeInterface {
@Resource(name = "me")
private Me target;// ,
@Resource(name="ser")
private Servant servant;
@Override
public void dowork() {
servant.work1();
target.dowork();
servant.work2();
}
}
e)代理店の使用@Test
public void test() {
BeanFactory factory = new ClassPathXmlApplicationContext(
"applicationContext.xml");
MeInterface me = (MeInterface) factory.getBean(MyProxy.class);
// ……
me.dowork();
}
動的エージェントとクロスカット懸念点分離public class DynamicProxyFactory implements InvocationHandler {
private DynamicProxyFactory() {
}
// new , newInstance
private Servant servant;
private Object target;
/**
*
*/
public static Object newInstance(Object target, Servant servant) {
DynamicProxyFactory dp = new DynamicProxyFactory();
dp.servant = servant;
dp.target = target;
return Proxy.newProxyInstance(target.getClass().getClassLoader(),
target.getClass().getInterfaces(), dp);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
servant.work1();
Object o = // ( )
method.invoke(target, args);
servant.work2();
return o;
}
}
@Test
public void test() {
BeanFactory factory = new ClassPathXmlApplicationContext(
"applicationContext.xml");
MeInterface me = (MeInterface) factory.getBean("my");
// ……
me.dowork();
System.out.println("--------------------");
HeInterface he = (HeInterface) factory.getBean("h");
he.hedowork();
}
SpringのAsppectJを利用して動的代理分離の注目点を作成します. aspectjrt.jar Spring
aspectjweaver.jar Spring
aopalliance.jar aop
spring-aop-3.2.0.M1.jar aop
/**
*
*/
@Aspect
@Component
public class AspClass {
@Resource(name = "ser")
private Servant servant;
@Before("execution(* com.ashmit.spring.MeInterface.*(..))||execution(* com.ashmit.spring.HeInterface.*(..))")
void before() {
servant.work1();
}
@After("execution(* com.ashmit.spring.MeInterface.*(..))||execution(* com.ashmit.spring.HeInterface.*(..))")
void after() {
servant.work2();
}
}
@Test
public void test() {
BeanFactory factory = new ClassPathXmlApplicationContext(
"applicationContext.xml");
MeInterface me = (MeInterface) factory.getBean("me");
// ……
me.dowork();
System.out.println("--------------------");
HeInterface he = (HeInterface) factory.getBean("he");
he.hedowork();
}
@Aspect
@Component
public class Servant01 implements Ordered {
@Before("execution(* com.ashmit.spring.MeInterface.*(..))||execution(* com.ashmit.spring.HeInterface.*(..))")
public void makeBeds() {
System.out.println(" ");
}
@Override
public int getOrder() {
return 0;
}
}
b)Servant 02@Aspect
@Component
public class Servant02 implements Ordered{
@Before("execution(* com.ashmit.spring.MeInterface.*(..))||execution(* com.ashmit.spring.HeInterface.*(..))")
public void dress() {
System.out.println(" ");
}
@Override
public int getOrder() {
// TODO Auto-generated method stub
return 1;
}
}
c)サーヴァント03@Aspect
@Component
public class Servant03 implements Ordered {
@Before("execution(* com.ashmit.spring.MeInterface.*(..))||execution(* com.ashmit.spring.HeInterface.*(..))")
public void haveAMeal() {
System.out.println(" ");
}
@After("execution(* com.ashmit.spring.MeInterface.*(..))||execution(* com.ashmit.spring.HeInterface.*(..))")
public void haveAMeal2() {
System.out.println(" ");
}
@Override
public int getOrder() {
// TODO Auto-generated method stub
return 2;
}
}
d)サーヴァント04@Aspect
@Component
public class Servant04 implements Ordered{
@After("execution(* com.ashmit.spring.MeInterface.*(..))||execution(* com.ashmit.spring.HeInterface.*(..))")
public void puChuang() {
System.out.println(" ");
}
@Override
public int getOrder() {
// TODO Auto-generated method stub
return 1;
}
}
e)Servant 05@Aspect
@Component
public class Servant05 implements Ordered{
@After("execution(* com.ashmit.spring.MeInterface.*(..))||execution(* com.ashmit.spring.HeInterface.*(..))")
public void undress() {
System.out.println(" ");
}
@Override
public int getOrder() {
// TODO Auto-generated method stub
return 0;
}
}
@Component("me")
public class Me implements MeInterface {
@Override
public void dowork() {
if (true)
throw new RuntimeException("RuntimeException……");
System.out.println(" ……");//
}
}
/**
*
*/
@Aspect
@Component
public class AspClass {
@Resource(name = "ser")
private Servant servant;
/**
* @param
* @return
*/
// @Around("execution(* com.ashmit.spring.MeInterface.*(..))||execution(* com.ashmit.spring.HeInterface.*(..))")
// public Object test(ProceedingJoinPoint proceeding) {
// Object o = null;
// try {
// servant.work1();
// // proceeding.proceed(proceeding.getArgs());
// o = proceeding.proceed();
//
// servant.work2();
// } catch (Throwable e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// return o;
// }
@Before("execution(* com.ashmit.spring.MeInterface.*(..))||execution(* com.ashmit.spring.HeInterface.*(..))")
void before() {
System.out.println(" ……");
servant.work1();
}
@After("execution(* com.ashmit.spring.MeInterface.*(..))||execution(* com.ashmit.spring.HeInterface.*(..))")
void after() {
servant.work2();
System.out.println(" ……");
}
/**
* ( )
*/
@AfterReturning("execution(* com.ashmit.spring.MeInterface.*(..))||execution(* com.ashmit.spring.HeInterface.*(..))")
void test2() {
System.out.println(" ……");
}
/**
* : @Around ,
*/
@AfterThrowing("execution(* com.ashmit.spring.MeInterface.*(..))||execution(* com.ashmit.spring.HeInterface.*(..))")
void test3() {
System.out.println(" ……");
}
}
Springプロファイルにカットを配置する/**
*
*/
@Component("aspclass")
public class AspClass {
@Resource(name = "ser")
private Servant servant;
void before() {
servant.work1();
}
void after() {
servant.work2();
}
}
Spring AOP宣言式事務 commons-dbcp.jar
commons-pool.jar
spring-jdbc-3.2.0.M1.jar dataSource
spring-orm-3.2.0.M1.jar sessionFactory
spring-aop-3.2.0.M1.jar aop
spring-tx-3.2.0.M1.jar
com.ashmit.entity.User
com.ashmit.entity.Group
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.show_sql=true
hbm2ddl.auto=update
javax.persistence.validation.mode=none
hibernate.cache.use_second_level_cache=true
hibernate.cache.use_query_cache=true
hibernate.cache.region.factory_class=org.hibernate.cache.ehcache.EhCacheRegionFactory
SpringとStrutsフレームの集積struts2-spring-plugin-2.3.4.jar Struts
spring-web-3.2.0.M1.jar Spring
@Controller("userAction")
public class UserAction implements ModelDriven {
private User user = null;
@Resource(name = "groupService")
private GroupService groupService = null;
@Resource(name = "userService")
private UserService userService = null;
//
……
}
org.springframework.web.context.ContextLoaderListener
contextConfigLocation
/WEB-INF/applicationContext-*.xml,classpath*:applicationContext-*.xml
……
BaseDaoモードpublic class BaseDao {
@Resource(name = "sessionFactory")
private SessionFactory sessionFactory = null;
protected Session getSession() {
return this.sessionFactory.getCurrentSession();
}
}
OpenSession InViewモード怠惰なロードポリシーに対応する
org.springframework.web.context.ContextLoaderListener
contextConfigLocation
/WEB-INF/applicationContext-*.xml,classpath*:applicationContext-*.xml
OpenSessionInViewFilter
org.springframework.orm.hibernate4.support.OpenSessionInViewFilter
OpenSessionInViewFilter
/*
……