﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-JAVA我的最爱！！！-随笔分类-spring学习</title><link>http://www.blogjava.net/phoebird/category/41399.html</link><description>勤练内功，不断实践招数。争取早日成为武林高手。</description><language>zh-cn</language><lastBuildDate>Sun, 13 Sep 2009 15:36:38 GMT</lastBuildDate><pubDate>Sun, 13 Sep 2009 15:36:38 GMT</pubDate><ttl>60</ttl><item><title>Spring 2.5整合 hibernate3.3</title><link>http://www.blogjava.net/phoebird/archive/2009/09/13/294941.html</link><dc:creator>笑口常开、财源滚滚来！</dc:creator><author>笑口常开、财源滚滚来！</author><pubDate>Sun, 13 Sep 2009 08:38:00 GMT</pubDate><guid>http://www.blogjava.net/phoebird/archive/2009/09/13/294941.html</guid><wfw:comment>http://www.blogjava.net/phoebird/comments/294941.html</wfw:comment><comments>http://www.blogjava.net/phoebird/archive/2009/09/13/294941.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/phoebird/comments/commentRss/294941.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/phoebird/services/trackbacks/294941.html</trackback:ping><description><![CDATA[<p><span style="color: #0000ff"><span style="font-size: 18pt">package cn.itcast.bean;</span></span></p>
<p><span style="color: #0000ff"><span style="font-size: 18pt">public class Person {</span></span></p>
<p><span style="color: #0000ff"><span style="font-size: 18pt">&nbsp;private Integer id;<br />
&nbsp;private String name;<br />
&nbsp;<br />
&nbsp;public Person(){<br />
&nbsp;&nbsp;<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;public Person(String name) {<br />
&nbsp;&nbsp;this.name=name;<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;getter&amp;&amp;setter方法&nbsp;<br />
}<br />
<br />
<br />
Person.hbm.xml<br />
<br />
</span></span></p>
<p><span style="color: #0000ff"><span style="font-size: 18pt">&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;!DOCTYPE hibernate-mapping PUBLIC<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "-//Hibernate/Hibernate Mapping DTD 3.0//EN"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;<br />
&lt;hibernate-mapping package="cn.itcast.bean"&gt;<br />
&nbsp;&lt;class name="Person" table="person"&gt;<br />
&nbsp;<br />
&nbsp;&nbsp;&lt;id name="id" type="integer"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;generator class="native"&gt;&lt;/generator&gt;<br />
&nbsp;&nbsp;&lt;/id&gt;<br />
&nbsp;&nbsp;&lt;property name="name" length="10" not-null="true"&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&lt;/class&gt;</span></span></p>
<p><span style="color: #0000ff"><span style="font-size: 18pt">&lt;/hibernate-mapping&gt;</span></span></p>
<span style="color: #0000ff"><span style="font-size: 18pt">定义业务接口<br />
<br />
</span></span>
<p><span style="color: #0000ff"><span style="font-size: 18pt">package cn.itcast.service;</span></span></p>
<p><span style="color: #0000ff"><span style="font-size: 18pt">import java.util.List;</span></span></p>
<p><span style="color: #0000ff"><span style="font-size: 18pt">import cn.itcast.bean.Person;</span></span></p>
<p><span style="color: #0000ff"><span style="font-size: 18pt">public interface IPersonService {</span></span></p>
<p><span style="color: #0000ff"><span style="font-size: 18pt">&nbsp;/**<br />
&nbsp; * 保存人员信息<br />
&nbsp; * @param person<br />
&nbsp; */<br />
&nbsp;public abstract void save(Person person);</span></span></p>
<p><span style="color: #0000ff"><span style="font-size: 18pt">&nbsp;/**<br />
&nbsp; * 更新信息<br />
&nbsp; * @param person<br />
&nbsp; */<br />
&nbsp;public abstract void update(Person person);</span></span></p>
<p><span style="color: #0000ff"><span style="font-size: 18pt">&nbsp;/**<br />
&nbsp; * 获取人员<br />
&nbsp; * @param personId<br />
&nbsp; * @return<br />
&nbsp; */<br />
&nbsp;public abstract Person getPerson(Integer personId);</span></span></p>
<p><span style="color: #0000ff"><span style="font-size: 18pt">&nbsp;/**<br />
&nbsp; * 删除人员信息<br />
&nbsp; * @param personId<br />
&nbsp; */<br />
&nbsp;public abstract void delete(Integer personId);</span></span></p>
<p><span style="color: #0000ff"><span style="font-size: 18pt">&nbsp;/**<br />
&nbsp; * 获取人员列表<br />
&nbsp; * @return<br />
&nbsp; */<br />
&nbsp;public abstract List&lt;Person&gt; getPersons();</span></span></p>
<p><span style="color: #0000ff"><span style="font-size: 18pt">}</span></span></p>
<br />
<span style="color: #0000ff"><span style="font-size: 18pt">业务实现类<br />
<br />
</span></span>
<p><span style="color: #0000ff"><span style="font-size: 18pt">package cn.itcast.service.impl;</span></span></p>
<p><span style="color: #0000ff"><span style="font-size: 18pt">import java.util.List;</span></span></p>
<p><span style="color: #0000ff"><span style="font-size: 18pt">import javax.annotation.Resource;</span></span></p>
<p><span style="color: #0000ff"><span style="font-size: 18pt">import org.hibernate.SessionFactory;<br />
import org.springframework.transaction.annotation.Propagation;<br />
import org.springframework.transaction.annotation.Transactional;</span></span></p>
<p><span style="color: #0000ff"><span style="font-size: 18pt">import cn.itcast.bean.Person;<br />
import cn.itcast.service.IPersonService;</span></span></p>
<p><span style="color: #0000ff"><span style="font-size: 18pt">/**<br />
&nbsp;* 业务层，采用注解声明事务<br />
&nbsp;* <br />
&nbsp;* @author Administrator<br />
&nbsp;* <br />
&nbsp;*/<br />
@Transactional<br />
public class PersonServiceBean implements IPersonService {</span></span></p>
<p><span style="color: #0000ff"><span style="font-size: 18pt">&nbsp;@Resource<br />
&nbsp;private SessionFactory sessionFactory;</span></span></p>
<p><span style="color: #0000ff"><span style="font-size: 18pt">&nbsp;public void save(Person person) {</span></span></p>
<p><span style="color: #0000ff"><span style="font-size: 18pt">&nbsp;&nbsp;// 从spring 容器中得到正在管理的sessionFactory,persist方法用于保存实体</span></span></p>
<p><span style="color: #0000ff"><span style="font-size: 18pt">&nbsp;&nbsp;sessionFactory.getCurrentSession().persist(person);</span></span></p>
<p><span style="color: #0000ff"><span style="font-size: 18pt">&nbsp;}</span></span></p>
<p><span style="color: #0000ff"><span style="font-size: 18pt">&nbsp;public void update(Person person) {<br />
&nbsp;&nbsp;sessionFactory.getCurrentSession().merge(person);<br />
&nbsp;}<br />
@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)<br />
&nbsp;public Person getPerson(Integer personId) {<br />
&nbsp;&nbsp;return (Person) sessionFactory.getCurrentSession().get(Person.class,<br />
&nbsp;&nbsp;&nbsp;&nbsp;personId);<br />
&nbsp;}</span></span></p>
<p><span style="color: #0000ff"><span style="font-size: 18pt">&nbsp;public void delete(Integer personId) {<br />
&nbsp;&nbsp;sessionFactory.getCurrentSession()<br />
&nbsp;&nbsp;&nbsp;&nbsp;.delete(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sessionFactory.getCurrentSession().load(Person.class,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;personId));<br />
&nbsp;}<br />
&nbsp;@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)<br />
&nbsp;@SuppressWarnings("unchecked")<br />
&nbsp;public List&lt;Person&gt; getPersons() {<br />
&nbsp;&nbsp;return sessionFactory.getCurrentSession().createQuery("from Person")<br />
&nbsp;&nbsp;&nbsp;&nbsp;.list();<br />
&nbsp;}</span></span></p>
<p><span style="color: #0000ff"><span style="font-size: 18pt">}<br />
</span></span></p>
<br />
<span style="color: #0000ff"><span style="font-size: 18pt">hibernate &amp;&amp; spring的配置文件<br />
beans.xml<br />
<br />
</span></span>
<p><span style="color: #0000ff"><span style="font-size: 18pt">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span></span></p>
<p><span style="color: #0000ff"><span style="font-size: 18pt">&lt;!--<br />
&nbsp;- Application context definition for JPetStore's business layer.<br />
&nbsp;- Contains bean references to the transaction manager and to the DAOs in<br />
&nbsp;- dataAccessContext-local/jta.xml (see web.xml's "contextConfigLocation").<br />
--&gt;<br />
&lt;beans xmlns="http://www.springframework.org/schema/beans"<br />
&nbsp;xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />
&nbsp;xmlns:context="http://www.springframework.org/schema/context"<br />
&nbsp;xmlns:aop="http://www.springframework.org/schema/aop"<br />
&nbsp;xmlns:tx="http://www.springframework.org/schema/tx"<br />
&nbsp;xsi:schemaLocation="<br />
&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd<br />
&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd<br />
&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd<br />
&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"&gt;</span></span></p>
<p><span style="color: #0000ff"><span style="font-size: 18pt">&nbsp;&lt;context:annotation-config /&gt;<br />
&nbsp;&lt;!-- 配置数据源 --&gt;<br />
&nbsp;&lt;bean id="dataSource"<br />
&nbsp;&nbsp;class="org.apache.commons.dbcp.BasicDataSource"<br />
&nbsp;&nbsp;destroy-method="close"&gt;<br />
&nbsp;&nbsp;&lt;property name="driverClassName"<br />
&nbsp;&nbsp;&nbsp;value="org.gjt.mm.mysql.Driver" /&gt;<br />
&nbsp;&nbsp;&lt;property name="url"<br />
&nbsp;&nbsp;&nbsp;value="jdbc:mysql://localhost:3306/itcast?useUnicode=true&amp;amp;characterEncoding=UTF-8" /&gt;<br />
&nbsp;&nbsp;&lt;property name="username" value="root" /&gt;<br />
&nbsp;&nbsp;&lt;property name="password" value="" /&gt;<br />
&nbsp;&nbsp;&lt;!-- 连接池启动时的初始值 --&gt;<br />
&nbsp;&nbsp;&lt;property name="initialSize" value="1" /&gt;<br />
&nbsp;&nbsp;&lt;!-- 连接池的最大值 --&gt;<br />
&nbsp;&nbsp;&lt;property name="maxActive" value="500" /&gt;<br />
&nbsp;&nbsp;&lt;!-- 最大空闲值.当经过一个高峰时间后，连接池可以慢慢将已经用不到的连接慢慢释放一部分，一直减少到maxIdle为止 --&gt;<br />
&nbsp;&nbsp;&lt;property name="maxIdle" value="2" /&gt;<br />
&nbsp;&nbsp;&lt;!--&nbsp; 最小空闲值.当空闲的连接数少于阀值时，连接池就会预申请去一些连接，以免洪峰来时来不及申请 --&gt;<br />
&nbsp;&nbsp;&lt;property name="minIdle" value="1" /&gt;<br />
&nbsp;&lt;/bean&gt;</span></span></p>
<p><span style="color: #0000ff"><span style="font-size: 18pt">&nbsp;&lt;bean id="sessionFactory"<br />
&nbsp;&nbsp;class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"&gt;<br />
&nbsp;&nbsp;&lt;property name="dataSource" ref="dataSource" /&gt;&lt;!-- 将datasource注入到sessionFactory --&gt;<br />
&nbsp;&nbsp;&lt;property name="mappingResources"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;list&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;cn/itcast/bean/Person.hbm.xml&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/list&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="hibernateProperties"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;hibernate.dialect=org.hibernate.dialect.MySQL5Dialect<br />
&nbsp;&nbsp;&nbsp;&nbsp;hibernate.hbm2ddl.auto=update hibernate.show_sql=false<br />
&nbsp;&nbsp;&nbsp;&nbsp;hibernate.format_sql=false<br />
&nbsp;&nbsp;&nbsp;&lt;/value&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&lt;/bean&gt;</span></span></p>
<p><span style="color: #0000ff"><span style="font-size: 18pt">&nbsp;&lt;!--&nbsp; 通过事务管理 管理sessionFactory --&gt;<br />
&nbsp;&lt;bean id="txManager"<br />
&nbsp;&nbsp;class="org.springframework.orm.hibernate3.HibernateTransactionManager"&gt;</span></span></p>
<p><span style="color: #0000ff"><span style="font-size: 18pt">&nbsp;&nbsp;&lt;property name="sessionFactory" ref="sessionFactory" /&gt;<br />
&nbsp;&lt;/bean&gt;</span></span></p>
<p><span style="color: #0000ff"><span style="font-size: 18pt">&nbsp;&lt;tx:annotation-driven transaction-manager="txManager" /&gt;<br />
&nbsp;&lt;bean id="personServiceBean"<br />
&nbsp;&nbsp;class="cn.itcast.service.impl.PersonServiceBean"&gt;<br />
&nbsp;&lt;/bean&gt;<br />
&lt;/beans&gt;<br />
</span></span></p>
<br />
<br />
<span style="color: #0000ff"><span style="font-size: 18pt">/**<br />
测试类**/<br />
<br />
</span></span>
<p><span style="color: #0000ff"><span style="font-size: 18pt">package junit;</span></span></p>
<p><br />
<span style="color: #0000ff"><span style="font-size: 18pt">import java.util.List;</span></span></p>
<p><span style="color: #0000ff"><span style="font-size: 18pt">import org.junit.BeforeClass;<br />
import org.junit.Test;<br />
import org.springframework.context.ApplicationContext;<br />
import org.springframework.context.support.ClassPathXmlApplicationContext;</span></span></p>
<p><span style="color: #0000ff"><span style="font-size: 18pt">import cn.itcast.bean.Person;<br />
import cn.itcast.service.IPersonService;</span></span></p>
<p><span style="color: #0000ff"><span style="font-size: 18pt">public class IPersonServiceTest {</span></span></p>
<p><span style="color: #0000ff"><span style="font-size: 18pt">&nbsp;private static IPersonService ipersonservice;<br />
&nbsp;@BeforeClass<br />
&nbsp;public static void setUpBeforeClass() throws Exception {<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");<br />
&nbsp;&nbsp;&nbsp;ipersonservice=(IPersonService)ctx.getBean("personServiceBean");<br />
&nbsp;&nbsp;} catch (RuntimeException e) {<br />
&nbsp;&nbsp;&nbsp;// TODO Auto-generated catch block<br />
&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;@Test<br />
&nbsp;public void TestSave(){<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;ipersonservice.save(new Person("小张"));<br />
&nbsp;&nbsp;System.out.println("保存成功");<br />
&nbsp;}</span></span></p>
<p><span style="color: #0000ff"><span style="font-size: 18pt">&nbsp;@Test public void testGetPerson(){<br />
&nbsp;&nbsp;Person person=ipersonservice.getPerson(1);<br />
&nbsp;&nbsp;System.out.println(person.getName());<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;@Test public void testUpdate(){<br />
&nbsp;&nbsp;Person person=ipersonservice.getPerson(1);<br />
&nbsp;&nbsp;person.setName("小丽");<br />
&nbsp;&nbsp;ipersonservice.update(person);<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;@Test public void testGetPersons(){<br />
&nbsp;&nbsp;List&lt;Person&gt; persons=ipersonservice.getPersons();<br />
&nbsp;&nbsp;for(Person person : persons){<br />
&nbsp;&nbsp;&nbsp;System.out.println(person.getId()+"&nbsp; :" +person.getName());<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;@Test public void testDelete(){<br />
&nbsp;&nbsp;ipersonservice.delete(1);<br />
&nbsp;}<br />
}<br />
<br />
table :person<br />
id&nbsp; int <br />
name varchar <br />
<br />
</span></span></p>
<img src ="http://www.blogjava.net/phoebird/aggbug/294941.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/phoebird/" target="_blank">笑口常开、财源滚滚来！</a> 2009-09-13 16:38 <a href="http://www.blogjava.net/phoebird/archive/2009/09/13/294941.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring 两种切面声明方式</title><link>http://www.blogjava.net/phoebird/archive/2009/09/02/293570.html</link><dc:creator>笑口常开、财源滚滚来！</dc:creator><author>笑口常开、财源滚滚来！</author><pubDate>Wed, 02 Sep 2009 04:14:00 GMT</pubDate><guid>http://www.blogjava.net/phoebird/archive/2009/09/02/293570.html</guid><wfw:comment>http://www.blogjava.net/phoebird/comments/293570.html</wfw:comment><comments>http://www.blogjava.net/phoebird/archive/2009/09/02/293570.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/phoebird/comments/commentRss/293570.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/phoebird/services/trackbacks/293570.html</trackback:ping><description><![CDATA[Spring提供了两种切面声明方式，实际工作中我们可以选用其中一种：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 基于XML配置方式声明切面。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 基于注解方式声明切面。<br />
要进行AOP编程，首先我们要在spring的配置文件中引入aop命名空间：<br />
&lt;beans xmlns="http://www.springframework.org/schema/beans"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: red">xmlns:aop="http://www.springframework.org/schema/aop"<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xsi:schemaLocation="http://www.springframework.org/schema/beans<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://www.springframework.org/schema/beans/spring-beans-2.5.xsd<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red">&nbsp;http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd</span>"&gt;<br />
&lt;/beans&gt;<br />
<br />
<br />
基于注解方式声明切面<br />
<br />
<p>@Aspect<br />
public class LogPrint {<br />
&nbsp;@Pointcut("execution(* cn.itcast.service..*.*(..))")<br />
&nbsp;private void anyMethod() {}//声明一个切入点&nbsp;<br />
&nbsp;@Before("anyMethod() &amp;&amp; args(userName)")//定义前置通知<br />
&nbsp;public void doAccessCheck(String userName) {<br />
&nbsp;}&nbsp;<br />
&nbsp;@AfterReturning(pointcut="anyMethod()",returning="revalue")//定义后置通知<br />
&nbsp;public void doReturnCheck(String revalue) {<br />
&nbsp;}<br />
&nbsp;@AfterThrowing(pointcut="anyMethod()", throwing="ex")//定义例外通知<br />
&nbsp;&nbsp;&nbsp; public void doExceptionAction(Exception ex) {<br />
&nbsp;}<br />
&nbsp;@After("anyMethod()")//定义最终通知<br />
&nbsp;public void doReleaseAction() {<br />
&nbsp;}<br />
&nbsp;@Around("anyMethod()")//环绕通知<br />
&nbsp;public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable {<br />
&nbsp;&nbsp;return pjp.proceed();<br />
&nbsp;}<br />
}<br />
</p>
<p><br />
<br />
基于基于XML配置方式声明切面<br />
<br />
<br />
public class LogPrint {<br />
&nbsp;public void doAccessCheck() {}定义前置通知<br />
&nbsp;public void doReturnCheck() {}定义后置通知<br />
&nbsp;&nbsp;&nbsp; public void doExceptionAction() {}定义例外通知<br />
&nbsp;public void doReleaseAction() {}定义最终通知<br />
&nbsp;public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable {<br />
&nbsp;&nbsp;return pjp.proceed();环绕通知<br />
&nbsp;}<br />
}<br />
<br />
<br />
&lt;bean id="orderservice" class="cn.itcast.service.OrderServiceBean"/&gt;<br />
&lt;bean id="<span style="color: #0000ff">log</span>" class="cn.itcast.service.LogPrint"/&gt;<br />
&lt;aop:config&gt;<br />
&nbsp; &lt;aop:aspect id="myaop" ref="<span style="color: #0000ff">log</span>"&gt;<br />
&nbsp; &nbsp;&lt;aop:pointcut id="<span style="color: red">mycut</span>" expression="execution(* cn.itcast.service..*.*(..))"/&gt;<br />
&nbsp; &nbsp;&lt;aop:before pointcut-ref="<span style="color: red">mycut</span>" method="doAccessCheck"/&gt;<br />
&nbsp; &nbsp;&lt;aop:after-returning pointcut-ref="<span style="color: red">mycut</span>" method="doReturnCheck "/&gt;<br />
&nbsp; &nbsp;&lt;aop:after-throwing pointcut-ref="<span style="color: red">mycut</span>" method="doExceptionAction"/&gt;<br />
&nbsp; &nbsp;&lt;aop:after pointcut-ref="<span style="color: red">mycut</span>" method=&#8220;doReleaseAction"/&gt;<br />
&nbsp; &nbsp;&lt;aop:around pointcut-ref="<span style="color: red">mycut</span>" method="doBasicProfiling"/&gt;<br />
&nbsp; &lt;/aop:aspect&gt;<br />
&lt;/aop:config&gt;<br />
&nbsp;</p>
 <img src ="http://www.blogjava.net/phoebird/aggbug/293570.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/phoebird/" target="_blank">笑口常开、财源滚滚来！</a> 2009-09-02 12:14 <a href="http://www.blogjava.net/phoebird/archive/2009/09/02/293570.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转载 Spring的架构</title><link>http://www.blogjava.net/phoebird/archive/2009/08/28/292930.html</link><dc:creator>笑口常开、财源滚滚来！</dc:creator><author>笑口常开、财源滚滚来！</author><pubDate>Fri, 28 Aug 2009 01:53:00 GMT</pubDate><guid>http://www.blogjava.net/phoebird/archive/2009/08/28/292930.html</guid><wfw:comment>http://www.blogjava.net/phoebird/comments/292930.html</wfw:comment><comments>http://www.blogjava.net/phoebird/archive/2009/08/28/292930.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/phoebird/comments/commentRss/292930.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/phoebird/services/trackbacks/292930.html</trackback:ping><description><![CDATA[转载：http://hi.baidu.com/panqf/blog/item/b0db04874b1ccb2bc65cc313.html<br />
<br />
&nbsp;Spring 框架是一个分层架构，由 7 个定义良好的模块组成。Spring 模块构建在核心容器之上，核心容器定义了创建、配置和管理 bean 的方式，如图 1 所示。<br />
<a name="fig1"><strong>图 1. Spring 框架的 7 个模块</strong></a><br />
<img height="288" alt="Spring 框架图示" src="http://www.ibm.com/developerworks/cn/java/wa-spring1/spring_framework.gif" width="555" /> <br />
<p>组成 Spring 框架的每个模块（或组件）都可以单独存在，或者与其他一个或多个模块联合实现。每个模块的功能如下： </p>
<ul>
    <li><strong>核心容器</strong>：核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 <code>BeanFactory</code>，它是工厂模式的实现。<code>BeanFactory</code> 使用<em>控制反转</em> （IOC） 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
    <li><strong>Spring 上下文</strong>：Spring 上下文是一个配置文件，向 Spring 框架提供上下文信息。Spring 上下文包括企业服务，例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。
    <li><strong>Spring AOP</strong>： 通过配置管理特性，Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以，可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP，不用依赖 EJB 组件，就可以将声明性事务管理集成到应用程序中。
    <li><strong>Spring DAO</strong>：JDBC DAO 抽象层提供了有意义的异常层次结构，可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理，并且极大地降低了需要编写 的异常代码数量（例如打开和关闭连接）。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
    <li><strong>Spring ORM</strong>：Spring 框架插入了若干个 ORM 框架，从而提供了 ORM 的对象关系工具，其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
    <li><strong>Spring Web 模块</strong>：Web 上下文模块建立在应用程序上下文模块之上，为基于 Web 的应用程序提供了上下文。所以，Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
    <li><strong>Spring MVC 框架</strong>：MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口，MVC 框架变成为高度可配置的，MVC 容纳了大量视图技术，其中包括 JSP、Velocity、Tiles、iText 和 POI。 </li>
</ul>
<p>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Spring 框架的功能可以用在任何 J2EE 服务器中，大多数功能也适用于不受管理的环境。Spring 的核心要点是：支持不绑定到特定 J2EE 服务的可重用业务和数据访问对象。毫无疑问，这样的对象可以在不同 J2EE 环境 （Web 或 EJB）、独立应用程序、测试环境之间重用。 <br />
</p>
<p><br />
</p>
<img src ="http://www.blogjava.net/phoebird/aggbug/292930.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/phoebird/" target="_blank">笑口常开、财源滚滚来！</a> 2009-08-28 09:53 <a href="http://www.blogjava.net/phoebird/archive/2009/08/28/292930.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>集合对象注入&amp;&amp;通过构造函数注入</title><link>http://www.blogjava.net/phoebird/archive/2009/08/27/292862.html</link><dc:creator>笑口常开、财源滚滚来！</dc:creator><author>笑口常开、财源滚滚来！</author><pubDate>Thu, 27 Aug 2009 10:19:00 GMT</pubDate><guid>http://www.blogjava.net/phoebird/archive/2009/08/27/292862.html</guid><wfw:comment>http://www.blogjava.net/phoebird/comments/292862.html</wfw:comment><comments>http://www.blogjava.net/phoebird/archive/2009/08/27/292862.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/phoebird/comments/commentRss/292862.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/phoebird/services/trackbacks/292862.html</trackback:ping><description><![CDATA[<p>public interface <span style="color: red">IPersonService </span>{</p>
<p>&nbsp;public abstract void Save();<br />
&nbsp;public Set&lt;String&gt; getSets() ;<br />
&nbsp;public List&lt;String&gt; getLists() ;<br />
&nbsp;public Properties getProperties() ;<br />
&nbsp;public Map&lt;String, String&gt; getMaps() ;</p>
<p>}</p>
<br />
<br />
<p>public class <span style="color: red">PersonServiceBean </span>implements IPersonService {</p>
<p>&nbsp;private IPersonDao iPersonDao;<br />
&nbsp;private Set&lt;String&gt; sets=new HashSet&lt;String&gt;();<br />
&nbsp;private List&lt;String&gt; lists=new ArrayList&lt;String&gt;();<br />
&nbsp;private Properties properties=new Properties();<br />
&nbsp;private Map&lt;String,String&gt; maps=new HashMap&lt;String,String&gt;();<br />
&nbsp;<br />
&nbsp;public PersonServiceBean(IPersonDao personDao, String name) {<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;iPersonDao = personDao;<br />
&nbsp;&nbsp;this.name = name;<br />
&nbsp;}<br />
&nbsp;public void Save(){<br />
&nbsp;&nbsp;System.out.println(name);//输出name<br />
&nbsp;&nbsp;iPersonDao.add();<br />
&nbsp;}</p>
<p>&nbsp;private String name;<br />
&nbsp;<br />
&nbsp;public String getName() {<br />
&nbsp;&nbsp;return name;<br />
&nbsp;}</p>
<p>&nbsp;public void setName(String name) {<br />
&nbsp;&nbsp;this.name = name;<br />
&nbsp;}</p>
<p>&nbsp;public Map&lt;String, String&gt; getMaps() {<br />
&nbsp;&nbsp;return maps;<br />
&nbsp;}</p>
<p>&nbsp;public void setMaps(Map&lt;String, String&gt; maps) {<br />
&nbsp;&nbsp;this.maps = maps;<br />
&nbsp;}</p>
<p>&nbsp;public Properties getProperties() {<br />
&nbsp;&nbsp;return properties;<br />
&nbsp;}</p>
<p>&nbsp;public void setProperties(Properties properties) {<br />
&nbsp;&nbsp;this.properties = properties;<br />
&nbsp;}</p>
<p>&nbsp;public Set&lt;String&gt; getSets() {<br />
&nbsp;&nbsp;return sets;<br />
&nbsp;}</p>
<p>&nbsp;public void setSets(Set&lt;String&gt; sets) {<br />
&nbsp;&nbsp;this.sets = sets;<br />
&nbsp;}</p>
<p>&nbsp;public IPersonDao getIPersonDao() {<br />
&nbsp;&nbsp;return iPersonDao;<br />
&nbsp;}</p>
<p>&nbsp;public void setIPersonDao(IPersonDao personDao) {<br />
&nbsp;&nbsp;iPersonDao = personDao;<br />
&nbsp;}</p>
<p>&nbsp;<br />
&nbsp;public List&lt;String&gt; getLists() {<br />
&nbsp;&nbsp;return lists;<br />
&nbsp;}</p>
<p>&nbsp;public void setLists(List&lt;String&gt; lists) {<br />
&nbsp;&nbsp;this.lists = lists;<br />
&nbsp;}<br />
}<br />
<br />
<br />
<br />
测试类：</p>
<p>public class <span style="color: red">SpringTest </span>{</p>
<p>&nbsp;@BeforeClass<br />
&nbsp;public static void setUpBeforeClass() throws Exception {<br />
&nbsp;}<br />
&nbsp;@Test<br />
&nbsp;public void instanceSpring() {<br />
&nbsp;&nbsp;ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(<br />
&nbsp;&nbsp;&nbsp;&nbsp;"beans.xml");<br />
&nbsp;&nbsp;// ItcastClassPathXMLApplicationContext ctx=new<br />
&nbsp;&nbsp;// ItcastClassPathXMLApplicationContext("beans.xml");<br />
&nbsp;&nbsp;//&nbsp;&nbsp;<br />
&nbsp;&nbsp;IPersonService ipersonService = (IPersonService) ctx<br />
&nbsp;&nbsp;&nbsp;&nbsp;.getBean("personService");<br />
&nbsp;&nbsp;//集合对象的遍历<br />
&nbsp;&nbsp;System.out.println("===========set==================");<br />
&nbsp;&nbsp;for (String value : ipersonService.getSets()) {<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;System.out.println(value);<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;// ipersonService.Save();<br />
&nbsp;&nbsp;// ctx.close();<br />
&nbsp;&nbsp;// ctx.registerShutdownHook();<br />
&nbsp;&nbsp;System.out.println("===========List=================");<br />
&nbsp;&nbsp;for(String value:ipersonService.getLists()){<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;System.out.println(value);<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;System.out.println("=========properties===============");<br />
&nbsp;&nbsp;for(Object value:ipersonService.getProperties().keySet()){<br />
&nbsp;&nbsp;&nbsp;System.out.println(value);<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;System.out.println("================maps==================");<br />
&nbsp;&nbsp;for(Object value:ipersonService.getMaps().keySet()){<br />
&nbsp;&nbsp;&nbsp;System.out.println(value);<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;//调用PersonServiceBean的sava方法，输出结果<br />
&nbsp;&nbsp;ipersonService.Save();<br />
&nbsp;&nbsp;<br />
&nbsp;}<br />
}<br />
</p>
<br />
<br />
<p>&lt;beans xmlns="http://www.springframework.org/schema/beans"<br />
&nbsp;xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />
&nbsp;xmlns:aop="http://www.springframework.org/schema/aop"<br />
&nbsp;xmlns:tx="http://www.springframework.org/schema/tx"<br />
&nbsp;xsi:schemaLocation="<br />
&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd<br />
&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd<br />
&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"&gt;<br />
&nbsp;&lt;bean id="personService"<br />
&nbsp;&nbsp;class="cn.itcast.service.impl.PersonServiceBean"&gt;<br />
&nbsp;&nbsp;&lt;property name="IPersonDao" ref="personDaoBean"&gt;&lt;/property&gt;</p>
<p style="color: red">&nbsp;&nbsp;&lt;constructor-arg index="0" ref="personDaoBean"<br />
&nbsp;&nbsp;&nbsp;type="cn.itcast.dao.IPersonDao" /&gt;<br />
&nbsp;&nbsp;&lt;constructor-arg index="1" type="java.lang.String"<br />
&nbsp;&nbsp;&nbsp;value="传智博客"&gt;<br />
&nbsp;&nbsp;&lt;/constructor-arg&gt;</p>
<p>&nbsp;&nbsp;&lt;property name="sets"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;set&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;set1&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;set2&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;set3&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/set&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;</p>
<p>&nbsp;&nbsp;&lt;property name="lists"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;list&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;list1&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;list2&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;list3&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/list&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;</p>
<p>&nbsp;&nbsp;&lt;property name="properties"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;props&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;prop key="properties1"&gt;property1&lt;/prop&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;prop key="properties2"&gt;property2&lt;/prop&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;prop key="properties3"&gt;property3&lt;/prop&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/props&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;</p>
<p>&nbsp;&nbsp;&lt;property name="maps"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;map&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;entry key="key1" value="keyFirst"&gt;&lt;/entry&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;entry key="key2" value="keySecond"&gt;&lt;/entry&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;entry key="key3" value="keyThird"&gt;&lt;/entry&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/map&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&lt;/bean&gt;<br />
&nbsp;&lt;bean id="personDaoBean" class="cn.itcast.dao.impl.PersonDaoBean"&gt;&lt;/bean&gt;</p>
<p><br />
&nbsp;&lt;!-- <br />
&nbsp;&nbsp;&lt;bean id="anotherPersonServiceBean"<br />
&nbsp;&nbsp;class="cn.itcast.service.impl.AnotherPersonServiceBean" &gt;<br />
&nbsp;&nbsp;&lt;/bean&gt;<br />
&nbsp;--&gt;<br />
&lt;/beans&gt;<br />
<br />
<br />
public class PersonDaoBean implements IPersonDao {<br />
&nbsp;public void add(){<br />
&nbsp;&nbsp;System.out.println("这是personDaoBean的Add()方法");<br />
&nbsp;}<br />
}</p>
<br />
<br />
输出：<br />
<br />
<br />
===========set==================<br />
set1<br />
set2<br />
set3<br />
===========List=================<br />
list1<br />
list2<br />
list3<br />
=========properties===============<br />
properties3<br />
properties2<br />
properties1<br />
================maps==================<br />
key1<br />
key2<br />
key3<br />
传智博客<br />
这是personDaoBean的Add()方法<br />
<br />
<img src ="http://www.blogjava.net/phoebird/aggbug/292862.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/phoebird/" target="_blank">笑口常开、财源滚滚来！</a> 2009-08-27 18:19 <a href="http://www.blogjava.net/phoebird/archive/2009/08/27/292862.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring依赖注入补充知识点</title><link>http://www.blogjava.net/phoebird/archive/2009/08/27/292822.html</link><dc:creator>笑口常开、财源滚滚来！</dc:creator><author>笑口常开、财源滚滚来！</author><pubDate>Thu, 27 Aug 2009 07:03:00 GMT</pubDate><guid>http://www.blogjava.net/phoebird/archive/2009/08/27/292822.html</guid><wfw:comment>http://www.blogjava.net/phoebird/comments/292822.html</wfw:comment><comments>http://www.blogjava.net/phoebird/archive/2009/08/27/292822.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/phoebird/comments/commentRss/292822.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/phoebird/services/trackbacks/292822.html</trackback:ping><description><![CDATA[依赖注入的方式：<br />
第一、通过接口注入<br />
第二、通过构造函数注入，设置对象参数<br />
第三、通过setter方法注入。<br />
后两者运用居多。<br />
<br />
<br />
通过内部bean注入，其缺点是内部bean只能被一个外部bean使用<br />
如下：<br />
&lt;bean id="personService"<br />
&nbsp;&nbsp;class="cn.itcast.service.impl.PersonServiceBean"&gt;<br />
&nbsp;&nbsp;&lt;property name="IPersonDao"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;bean class="cn.itcast.dao.impl.PersonDaoBean"&gt;&lt;/bean&gt;&lt;!--&nbsp;&nbsp;&nbsp;内部bean注入&nbsp;--&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&lt;/bean&gt;<br />
&nbsp; 也可以换为：通过 ref的方式也是可以的，其优点是通过ref参数，可以被多个bean引用。<br />
<br />
&lt;bean id="personService"<br />
&nbsp;&nbsp;class="cn.itcast.service.impl.PersonServiceBean"&gt;<br />
&nbsp;&nbsp;&lt;property name="IPersonDao" ref="personDaoBean"&gt;&lt;/property&gt;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&lt;/bean&gt;<br />
&nbsp; &lt;bean id="personDaoBean" class="cn.itcast.dao.impl.PersonDaoBean"&gt;&lt;/bean&gt;&nbsp;&nbsp;<br />
<br />
<br />
剖析依赖注入的内部机制：通过基本数据类型的向属性值类型的转换<br />
<br />
<br />
<br />
<p>/**<br />
&nbsp;* 实现的spring容器<br />
&nbsp;* <br />
&nbsp;* @author Administrator<br />
&nbsp;* <br />
&nbsp;*/<br />
public class ItcastClassPathXMLApplicationContext {</p>
<p>&nbsp;private List&lt;BeanDefinition&gt; beanDefines = new ArrayList&lt;BeanDefinition&gt;();<br />
&nbsp;private Map&lt;String, Object&gt; sigletons = new HashMap&lt;String, Object&gt;();</p>
<p>&nbsp;public ItcastClassPathXMLApplicationContext() {</p>
<p>&nbsp;}</p>
<p>&nbsp;public ItcastClassPathXMLApplicationContext(String filename) {<br />
&nbsp;&nbsp;// System.out.println("构造方法 ");<br />
&nbsp;&nbsp;this.readXml(filename);// 调用 读取配置文件 的方法<br />
&nbsp;&nbsp;this.instanceBeans();// 调用bean的实例化<br />
&nbsp;&nbsp;this.injectObject();// 注入对象<br />
&nbsp;}</p>
<p>&nbsp;/**<br />
&nbsp; * 为bean对象的属性注入值<br />
&nbsp; */<br />
&nbsp;private void injectObject() {<br />
&nbsp;&nbsp;for (BeanDefinition beanDefinition : beanDefines) {<br />
&nbsp;&nbsp;&nbsp;Object bean = sigletons.get(beanDefinition.getId());<br />
&nbsp;&nbsp;&nbsp;if (bean != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;// 取得属性描述 ，是一个数组<br />
&nbsp;&nbsp;&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PropertyDescriptor[] ps = Introspector.getBeanInfo(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bean.getClass()).getPropertyDescriptors();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (PropertyDefinition propertyDefinition : beanDefinition<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getPropertys()) {// 取所有属性<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (PropertyDescriptor properdesc : ps) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (propertyDefinition.getName().equals(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;properdesc.getName())) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method setter = properdesc.getWriteMethod();// 获取属性的setter方法.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// private<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000">if (setter != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object value=null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(propertyDefinition.getRef()!=null &amp;&amp; !"".equals(propertyDefinition.getRef().trim())){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value = sigletons<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.get(propertyDefinition<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getRef());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//将配置文件里字符串类型转换为属性类型的值 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value=ConvertUtils.convert(propertyDefinition.getValue(), properdesc.getPropertyType());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setter.setAccessible(true);// 设置为可访问<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setter.invoke(bean, value);// 把引用对象注入到属性<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;} catch (Exception e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}</p>
<p>&nbsp;}</p>
<p>&nbsp;/**<br />
&nbsp; * 完成bean的实例化<br />
&nbsp; */<br />
&nbsp;private void instanceBeans() {<br />
&nbsp;&nbsp;// System.out.println("bean实例化方法被调用");<br />
&nbsp;&nbsp;// 利用反射机制把bean实例化<br />
&nbsp;&nbsp;for (BeanDefinition beanDefinition : beanDefines) {<br />
&nbsp;&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;// 判断BeanDefinition的实例获得的类名不为null和空串<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (beanDefinition.getClassName() != null<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; !"".equals(beanDefinition.getClassName().trim()))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sigletons.put(beanDefinition.getId(), Class.forName(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;beanDefinition.getClassName()).newInstance());<br />
&nbsp;&nbsp;&nbsp;} catch (Exception e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;// TODO Auto-generated catch block<br />
&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;}</p>
<p>&nbsp;}</p>
<p>&nbsp;/**<br />
&nbsp; * 读取配置文件信息<br />
&nbsp; * <br />
&nbsp; * @param filename<br />
&nbsp; */<br />
&nbsp;private void readXml(String filename) {<br />
&nbsp;&nbsp;// System.out.println("读取xml文件的方法被调用了");</p>
<p>&nbsp;&nbsp;SAXReader saxReader = new SAXReader();// 创建读取器<br />
&nbsp;&nbsp;Document document = null;<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;URL xmlpath = this.getClass().getClassLoader()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getResource(filename);//取得当前xml文件在本地的位置<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;document = saxReader.read(xmlpath);// 读取路径<br />
&nbsp;&nbsp;&nbsp;Map&lt;String, String&gt; nsMap = new HashMap&lt;String, String&gt;();<br />
&nbsp;&nbsp;&nbsp;nsMap.put("ns", "http://www.springframework.org/schema/beans");// 加入命名空间<br />
&nbsp;&nbsp;&nbsp;XPath xsub = document.createXPath("//ns:beans/ns:bean");// 创建beans/bean查询路径<br />
&nbsp;&nbsp;&nbsp;xsub.setNamespaceURIs(nsMap);// 设置命名空间<br />
&nbsp;&nbsp;&nbsp;List&lt;Element&gt; beans = xsub.selectNodes(document);// 获取文档下所有bean节点<br />
&nbsp;&nbsp;&nbsp;for (Element element : beans) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;String id = element.attributeValue("id");// 获取id属性值<br />
&nbsp;&nbsp;&nbsp;&nbsp;String clazz = element.attributeValue("class");// 获取class属性值<br />
&nbsp;&nbsp;&nbsp;&nbsp;BeanDefinition beanDefine = new BeanDefinition(id, clazz);<br />
&nbsp;&nbsp;&nbsp;&nbsp;XPath propertysub = element.createXPath("ns:property");// 船舰查询路径</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;propertysub.setNamespaceURIs(nsMap);// 设置命名空间<br />
&nbsp;&nbsp;&nbsp;&nbsp;List&lt;Element&gt; propertys = propertysub.selectNodes(element);// 查找节点<br />
&nbsp;&nbsp;&nbsp;&nbsp;for (Element property : propertys) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String propertyName = property.attributeValue("name");// 取得property的name值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String propertyref = property.attributeValue("ref");// 取得property的ref值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000">String propertyValue = property.attributeValue("value");// 取得property的value值</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PropertyDefinition propertyDefinition = new PropertyDefinition(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;propertyName, propertyref,<span style="color: #ff0000">propertyValue</span>);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;beanDefine.getPropertys().add(propertyDefinition);// 将属性对象加入到bean中<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;beanDefines.add(beanDefine);<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;} catch (Exception e) {<br />
&nbsp;&nbsp;&nbsp;e.printStackTrace();</p>
<p>&nbsp;&nbsp;}</p>
<p>&nbsp;}</p>
<p>&nbsp;/**<br />
&nbsp; * 获取bean 实例<br />
&nbsp; * <br />
&nbsp; * @param beanName<br />
&nbsp; * @return<br />
&nbsp; */<br />
&nbsp;public Object getBean(String beanName) {</p>
<p>&nbsp;&nbsp;<br />
&nbsp;&nbsp;return this.sigletons.get(beanName);<br />
&nbsp;}</p>
<p>}<br />
</p>
<br />
&nbsp;&nbsp; <br />
<br />
&lt;bean id="personService"<br />
&nbsp;&nbsp;class="cn.itcast.service.impl.PersonServiceBean"&gt;<br />
&nbsp;&nbsp;&lt;property name="IPersonDao" ref="personDaoBean"&gt;&lt;/property&gt;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&lt;property name="name" value="Itcast"&gt;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="age" value="15"&gt;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;/bean&gt;<br />
&nbsp; &lt;bean id="personDaoBean" class="cn.itcast.dao.impl.PersonDaoBean"&gt;&lt;/bean&gt;&nbsp;&nbsp;<br />
&nbsp;&nbsp; <br />
<br />
<br />
<p>public class SpringTest {</p>
<p>&nbsp;@BeforeClass<br />
&nbsp;public static void setUpBeforeClass() throws Exception {</p>
<p>&nbsp;}<br />
&nbsp;@Test<br />
&nbsp;public void instanceSpring() {<br />
//&nbsp;&nbsp;ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(<br />
//&nbsp;&nbsp;&nbsp;&nbsp;"beans.xml");<br />
&nbsp;&nbsp;ItcastClassPathXMLApplicationContext ctx=new ItcastClassPathXMLApplicationContext("beans.xml");<br />
//&nbsp;&nbsp;<br />
&nbsp;&nbsp;IPersonService ipersonService = (IPersonService)ctx<br />
&nbsp;&nbsp;&nbsp;&nbsp;.getBean("personService");<br />
&nbsp;&nbsp;ipersonService.Save();<br />
&nbsp;//&nbsp;ctx.close();<br />
&nbsp;&nbsp;// ctx.registerShutdownHook();</p>
<p>&nbsp;}<br />
}<br />
<br />
<br />
public class PropertyDefinition {<br />
&nbsp;private String name;<br />
&nbsp;private String ref;<br />
&nbsp;private String value;<br />
&nbsp;public PropertyDefinition(String name, String ref,String value) {<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;this.name = name;<br />
&nbsp;&nbsp;this.ref = ref;<br />
&nbsp;&nbsp;this.value=value;<br />
&nbsp;}<br />
&nbsp;public String getName() {<br />
&nbsp;&nbsp;return name;<br />
&nbsp;}<br />
&nbsp;public void setName(String name) {<br />
&nbsp;&nbsp;this.name = name;<br />
&nbsp;}<br />
&nbsp;public String getRef() {<br />
&nbsp;&nbsp;return ref;<br />
&nbsp;}<br />
&nbsp;public void setRef(String ref) {<br />
&nbsp;&nbsp;this.ref = ref;<br />
}<br />
其他略。<br />
<br />
out:<br />
Itcast<br />
15<br />
这是personDaoBean的Add()方法<br />
</p>
<img src ="http://www.blogjava.net/phoebird/aggbug/292822.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/phoebird/" target="_blank">笑口常开、财源滚滚来！</a> 2009-08-27 15:03 <a href="http://www.blogjava.net/phoebird/archive/2009/08/27/292822.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>第七.二讲自定义依赖注入</title><link>http://www.blogjava.net/phoebird/archive/2009/08/27/292816.html</link><dc:creator>笑口常开、财源滚滚来！</dc:creator><author>笑口常开、财源滚滚来！</author><pubDate>Thu, 27 Aug 2009 06:46:00 GMT</pubDate><guid>http://www.blogjava.net/phoebird/archive/2009/08/27/292816.html</guid><wfw:comment>http://www.blogjava.net/phoebird/comments/292816.html</wfw:comment><comments>http://www.blogjava.net/phoebird/archive/2009/08/27/292816.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/phoebird/comments/commentRss/292816.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/phoebird/services/trackbacks/292816.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 今天花费了半天去写自定义容器，结果发现还是没发实现功能，无法输出，结果不断的调试、测试。最后终于搞定了。原来是写代码的时候把<span style="background-color: #ffff00">读取配置文件里方法readxml，里面读取子属性里面查找节点，调用查找对象搞错了</span>。本为<font style="background-color: #ffff00" color="#ff0000">propertysub.selectNodes(element)，但写为了<font color="#ff0000">xsub.selectNodes(element)</font></font>误用为主element里面查找子节点。还有就是在//ns:beans/<span style="color: red">ns:bean里面把冒号写成了顿号，真是太不仔细了。<br />
<br />
自定义容器<br />
<p>/**<br />
&nbsp;* 实现的spring容器<br />
&nbsp;* <br />
&nbsp;* @author Administrator<br />
&nbsp;* <br />
&nbsp;*/<br />
<span style="font-size: 14pt">public class ItcastClassPathXMLApplicationContext {</span></p>
<p><span style="font-size: 14pt">&nbsp;private List&lt;BeanDefinition&gt; beanDefines = new ArrayList&lt;BeanDefinition&gt;();<br />
&nbsp;private Map&lt;String, Object&gt; sigletons = new HashMap&lt;String, Object&gt;();</span></p>
<p><span style="font-size: 14pt">&nbsp;public ItcastClassPathXMLApplicationContext() {</span></p>
<p><span style="font-size: 14pt">&nbsp;}</span></p>
<p><span style="font-size: 14pt">&nbsp;public ItcastClassPathXMLApplicationContext(String filename) {<br />
&nbsp;&nbsp;// System.out.println("构造方法 ");<br />
&nbsp;&nbsp;this.readXml(filename);// 调用 读取配置文件 的方法<br />
&nbsp;&nbsp;this.instanceBeans();// 调用bean的实例化<br />
&nbsp;&nbsp;this.injectObject();// 注入对象<br />
&nbsp;}</span></p>
<p><span style="font-size: 14pt">&nbsp;/**<br />
&nbsp; * 为bean对象的属性注入值<br />
&nbsp; */<br />
&nbsp;private void injectObject() {<br />
&nbsp;&nbsp;for (BeanDefinition beanDefinition : beanDefines) {<br />
&nbsp;&nbsp;&nbsp;Object bean = sigletons.get(beanDefinition.getId());<br />
&nbsp;&nbsp;&nbsp;if (bean != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;// 取得属性描述 ，是一个数组<br />
&nbsp;&nbsp;&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PropertyDescriptor[] ps = Introspector.getBeanInfo(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bean.getClass()).getPropertyDescriptors();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (PropertyDefinition propertyDefinition : beanDefinition<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getPropertys()) {// 取所有属性<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (PropertyDescriptor properdesc : ps) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (propertyDefinition.getName().equals(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;properdesc.getName())) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method setter = properdesc.getWriteMethod();// 获取属性的setter方法.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// private<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (setter != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object value = sigletons<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.get(propertyDefinition.getRef());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setter.setAccessible(true);// 设置为可访问<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setter.invoke(bean, value);// 把引用对象注入到属性<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;} catch (Exception e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span></p>
<p><span style="font-size: 14pt">&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}</span></p>
<p><span style="font-size: 14pt">&nbsp;}</span></p>
<p><span style="font-size: 14pt">&nbsp;/**<br />
&nbsp; * 完成bean的实例化<br />
&nbsp; */<br />
&nbsp;private void instanceBeans() {<br />
&nbsp;&nbsp;// System.out.println("bean实例化方法被调用");<br />
&nbsp;&nbsp;// 利用反射机制把bean实例化<br />
&nbsp;&nbsp;for (BeanDefinition beanDefinition : beanDefines) {<br />
&nbsp;&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;// 判断BeanDefinition的实例获得的类名不为null和空串<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (beanDefinition.getClassName() != null<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; !"".equals(beanDefinition.getClassName().trim()))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sigletons.put(beanDefinition.getId(), Class.forName(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;beanDefinition.getClassName()).newInstance());<br />
&nbsp;&nbsp;&nbsp;} catch (Exception e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;// TODO Auto-generated catch block<br />
&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;}</span></p>
<p><span style="font-size: 14pt">&nbsp;&nbsp;}</span></p>
<p><span style="font-size: 14pt">&nbsp;}</span></p>
<p><span style="font-size: 14pt">&nbsp;/**<br />
&nbsp; * 读取配置文件信息<br />
&nbsp; * <br />
&nbsp; * @param filename<br />
&nbsp; */<br />
&nbsp;private void readXml(String filename) {<br />
&nbsp;&nbsp;// System.out.println("读取xml文件的方法被调用了");</span></p>
<p><span style="font-size: 14pt">&nbsp;&nbsp;SAXReader saxReader = new SAXReader();// 创建读取器<br />
&nbsp;&nbsp;Document document = null;<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;URL xmlpath = this.getClass().getClassLoader()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getResource(filename);//取得当前xml文件在本地的位置<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;document = saxReader.read(xmlpath);// 读取路径<br />
&nbsp;&nbsp;&nbsp;System.out.println(document);<br />
&nbsp;&nbsp;&nbsp;Map&lt;String, String&gt; nsMap = new HashMap&lt;String, String&gt;();<br />
&nbsp;&nbsp;&nbsp;nsMap.put("ns", "http://www.springframework.org/schema/beans");// 加入命名空间<br />
&nbsp;&nbsp;&nbsp;XPath xsub = document.createXPath("//ns:beans/ns:bean");// 创建beans/bean查询路径<br />
&nbsp;&nbsp;&nbsp;xsub.setNamespaceURIs(nsMap);// 设置命名空间<br />
&nbsp;&nbsp;&nbsp;List&lt;Element&gt; beans = xsub.selectNodes(document);// 获取文档下所有bean节点<br />
&nbsp;&nbsp;&nbsp;System.out.println(beans.size());<br />
&nbsp;&nbsp;&nbsp;for (Element element : beans) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;String id = element.attributeValue("id");// 获取id属性值<br />
&nbsp;&nbsp;&nbsp;&nbsp;String clazz = element.attributeValue("class");// 获取class属性值<br />
&nbsp;&nbsp;&nbsp;&nbsp;BeanDefinition beanDefine = new BeanDefinition(id, clazz);<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("id=" + id);<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("clazz=" + clazz);<br />
&nbsp;&nbsp;&nbsp;&nbsp;XPath propertysub = element.createXPath("ns:property");// 船舰查询路径</span></p>
<p><span style="font-size: 14pt">&nbsp;&nbsp;&nbsp;&nbsp;propertysub.setNamespaceURIs(nsMap);// 设置命名空间<br />
&nbsp;&nbsp;&nbsp;&nbsp;List&lt;Element&gt; propertys = propertysub.selectNodes(element);// 查找节点<br />
&nbsp;&nbsp;&nbsp;&nbsp;for (Element property : propertys) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String propertyName = property.attributeValue("name");// 取得property的name值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String propertyref = property.attributeValue("ref");// 取得property的ref值</span></p>
<p><span style="font-size: 14pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(propertyName + "=&nbsp; " + propertyref);</span></p>
<p><span style="font-size: 14pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PropertyDefinition propertyDefinition = new PropertyDefinition(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;propertyName, propertyref);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;beanDefine.getPropertys().add(propertyDefinition);// 将属性对象加入到bean中<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span></p>
<p><span style="font-size: 14pt">&nbsp;&nbsp;&nbsp;&nbsp;beanDefines.add(beanDefine);<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;} catch (Exception e) {<br />
&nbsp;&nbsp;&nbsp;e.printStackTrace();</span></p>
<p><span style="font-size: 14pt">&nbsp;&nbsp;}</span></p>
<p><span style="font-size: 14pt">&nbsp;}</span></p>
<p><span style="font-size: 14pt">&nbsp;/**<br />
&nbsp; * 获取bean 实例<br />
&nbsp; * <br />
&nbsp; * @param beanName<br />
&nbsp; * @return<br />
&nbsp; */<br />
&nbsp;public Object getBean(String beanName) {</span></p>
<p><span style="font-size: 14pt">&nbsp;&nbsp;<br />
&nbsp;&nbsp;return this.sigletons.get(beanName);<br />
&nbsp;}</span></p>
<p><span style="font-size: 14pt">}<br />
</span></p>
&nbsp;bean.xml配置文件<br />
<br />
<p>&lt;?xml version="1.0" encoding="UTF-8"?&gt;</p>
<p><br />
<span style="background-color: #ccffff">&lt;beans xmlns="http://www.springframework.org/schema/beans"</span><br />
&nbsp;xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />
&nbsp;xmlns:aop="http://www.springframework.org/schema/aop"<br />
&nbsp;xmlns:tx="http://www.springframework.org/schema/tx"<br />
&nbsp;xsi:schemaLocation="<br />
&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd<br />
&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd<br />
&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd" <br />
&nbsp;&nbsp;&gt;<br />
&nbsp;&lt;bean id="personService"<br />
&nbsp;&nbsp;class="cn.itcast.service.impl.PersonServiceBean"&gt;<br />
&nbsp;&nbsp;&lt;property name="IPersonDao" ref="personDaoBean"&gt;&lt;/property&gt;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&lt;/bean&gt;<br />
&nbsp; &lt;bean id="personDaoBean" class="cn.itcast.dao.impl.PersonDaoBean"&gt;&lt;/bean&gt;&nbsp;&nbsp;<br />
&lt;/beans&gt;<br />
</p>
<br />
自定义属性类 PropertyDefinition.java<br />
<p>package junit.test;</p>
<p>public class PropertyDefinition {<br />
&nbsp;private String name;<br />
&nbsp;private String ref;<br />
&nbsp;public PropertyDefinition(String name, String ref) {<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;this.name = name;<br />
&nbsp;&nbsp;this.ref = ref;<br />
&nbsp;}<br />
&nbsp;&nbsp;getter&amp;setter method</p>
<p>}<br />
</p>
<br />
测试类：springTest<br />
<br />
<br />
<p>package junit.test;</p>
<p>import org.junit.BeforeClass;<br />
import org.junit.Test;<br />
import org.springframework.context.ApplicationContext;<br />
import org.springframework.context.support.AbstractApplicationContext;<br />
import org.springframework.context.support.ClassPathXmlApplicationContext;<br />
import org.springframework.context.support.FileSystemXmlApplicationContext;</p>
<p>import cn.itcast.service.IPersonService;<br />
import cn.itcast.service.impl.PersonServiceBean;</p>
<p>public class SpringTest {</p>
<p>&nbsp;@BeforeClass<br />
&nbsp;public static void setUpBeforeClass() throws Exception {</p>
<p>&nbsp;}<br />
&nbsp;@Test<br />
&nbsp;public void instanceSpring() {<br />
//&nbsp;&nbsp;ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(<br />
//&nbsp;&nbsp;&nbsp;&nbsp;"beans.xml");<br />
&nbsp;&nbsp;<span style="font-size: 18pt; color: #0000ff">ItcastClassPathXMLApplicationContext ctx=new ItcastClassPathXMLApplicationContext("beans.xml");<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;IPersonService ipersonService = (IPersonService)ctx<br />
&nbsp;&nbsp;&nbsp;&nbsp;.getBean("personService");//调用自定义容器的getBean方法<br />
&nbsp;&nbsp;ipersonService.Save();<br />
</span>//&nbsp;&nbsp;ctx.close();<br />
&nbsp;&nbsp;// ctx.registerShutdownHook();</p>
<p>&nbsp;}<br />
}<br />
</p>
自定义bean类：<br />
<br />
<p>package junit.test;</p>
<p>import java.util.ArrayList;<br />
import java.util.List;</p>
<p>public class BeanDefinition {<br />
&nbsp;<br />
&nbsp;private String id;<br />
&nbsp;private String className;<br />
&nbsp;private List&lt;PropertyDefinition&gt; propertys=new ArrayList&lt;PropertyDefinition&gt;();<br />
&nbsp;生成getter,setter方法<br />
&nbsp;}<br />
</p>
<br />
<br />
<p>package cn.itcast.dao.impl;</p>
<p>import cn.itcast.dao.IPersonDao;</p>
<p>public class PersonDaoBean implements IPersonDao {<br />
&nbsp;public void add(){<br />
&nbsp;&nbsp;System.out.println("这是personDaoBean的Add()方法");<br />
&nbsp;}<br />
}</p>
<br />
<br />
<br />
<p>package cn.itcast.service;</p>
<p>public interface IPersonService {</p>
<p>&nbsp;public abstract void Save();</p>
<p>}</p>
<br />
<br />
<br />
<p>package cn.itcast.service.impl;</p>
<p><br />
import cn.itcast.dao.IPersonDao;<br />
import cn.itcast.service.IPersonService;<br />
/**<br />
&nbsp;* 业务bean<br />
&nbsp;* @author Administrator<br />
&nbsp;*<br />
&nbsp;*/<br />
public class PersonServiceBean implements IPersonService {</p>
<p>&nbsp;private IPersonDao iPersonDao;<br />
&nbsp;<br />
&nbsp;public IPersonDao getIPersonDao() {<br />
&nbsp;&nbsp;return iPersonDao;<br />
&nbsp;}</p>
<p>&nbsp;public void setIPersonDao(IPersonDao personDao) {<br />
&nbsp;&nbsp;iPersonDao = personDao;<br />
&nbsp;}</p>
<p>&nbsp;public void Save(){<br />
&nbsp;&nbsp;iPersonDao.add();<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;<br />
}<br />
</p>
<br />
<br />
运行测试类<br />
out:<br />
&nbsp;这是personDaoBean的Add()方法<br />
<br />
<br />
</span>
<img src ="http://www.blogjava.net/phoebird/aggbug/292816.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/phoebird/" target="_blank">笑口常开、财源滚滚来！</a> 2009-08-27 14:46 <a href="http://www.blogjava.net/phoebird/archive/2009/08/27/292816.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>第七 --编码剖析Spring依赖注入的原理</title><link>http://www.blogjava.net/phoebird/archive/2009/08/26/292621.html</link><dc:creator>笑口常开、财源滚滚来！</dc:creator><author>笑口常开、财源滚滚来！</author><pubDate>Wed, 26 Aug 2009 03:40:00 GMT</pubDate><guid>http://www.blogjava.net/phoebird/archive/2009/08/26/292621.html</guid><wfw:comment>http://www.blogjava.net/phoebird/comments/292621.html</wfw:comment><comments>http://www.blogjava.net/phoebird/archive/2009/08/26/292621.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/phoebird/comments/commentRss/292621.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/phoebird/services/trackbacks/292621.html</trackback:ping><description><![CDATA[<p>public interface IPersonService {</p>
<p>&nbsp;public abstract void Save();</p>
<p>}</p>
<br />
<br />
<p>public class PersonDaoBean implements IPersonDao {</p>
<p>&nbsp;<br />
&nbsp;public void add(){<br />
&nbsp;&nbsp;System.out.println("这是personDaoBean的Add()方法");<br />
&nbsp;}<br />
}<br />
<br />
<br />
</p>
<p>public class PersonServiceBean implements IPersonService {</p>
<p>&nbsp;private IPersonDao iPersonDao;<br />
&nbsp;<br />
&nbsp;public IPersonDao getIPersonDao() {<br />
&nbsp;&nbsp;return iPersonDao;<br />
&nbsp;}</p>
<p>&nbsp;public void setIPersonDao(IPersonDao personDao) {<br />
&nbsp;&nbsp;iPersonDao = personDao;<br />
&nbsp;}</p>
<p>&nbsp;public void Save(){<br />
&nbsp;&nbsp;iPersonDao.add();<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;<br />
}</p>
<br />
<br />
<br />
&lt;bean id="personDaoBean" class="cn.itcast.dao.impl.PersonDaoBean"&gt;&lt;/bean&gt;<br />
&nbsp;&lt;bean id="personService"<br />
&nbsp;&nbsp;class="cn.itcast.service.impl.PersonServiceBean"&gt;<br />
&nbsp;&nbsp;&lt;property name="IPersonDao" ref="personDaoBean"&gt;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;/bean&gt;<br />
&nbsp;&nbsp; <br />
<br />
<p>public void instanceSpring() {<br />
&nbsp;&nbsp;ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(<br />
&nbsp;&nbsp;&nbsp;&nbsp;"beans.xml");<br />
&nbsp;&nbsp;IPersonService ipersonService = (IPersonService) ctx<br />
&nbsp;&nbsp;&nbsp;&nbsp;.getBean("personService");<br />
&nbsp;&nbsp;ipersonService.Save();<br />
&nbsp;&nbsp;ctx.close();<br />
&nbsp;&nbsp;// ctx.registerShutdownHook();</p>
<p>&nbsp;}<br />
</p>
<br />
<br />
输出：这是personDaoBean的Add()方法<br />
<img src ="http://www.blogjava.net/phoebird/aggbug/292621.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/phoebird/" target="_blank">笑口常开、财源滚滚来！</a> 2009-08-26 11:40 <a href="http://www.blogjava.net/phoebird/archive/2009/08/26/292621.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>第六 Spring 管理bean的生命周期</title><link>http://www.blogjava.net/phoebird/archive/2009/08/26/292606.html</link><dc:creator>笑口常开、财源滚滚来！</dc:creator><author>笑口常开、财源滚滚来！</author><pubDate>Wed, 26 Aug 2009 02:32:00 GMT</pubDate><guid>http://www.blogjava.net/phoebird/archive/2009/08/26/292606.html</guid><wfw:comment>http://www.blogjava.net/phoebird/comments/292606.html</wfw:comment><comments>http://www.blogjava.net/phoebird/archive/2009/08/26/292606.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/phoebird/comments/commentRss/292606.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/phoebird/services/trackbacks/292606.html</trackback:ping><description><![CDATA[<p><span style="font-size: 14pt"><span style="color: #ff0000">public class PersonServiceBean implements IPersonService {</span></span></p>
<p><span style="font-size: 14pt"><span style="color: #ff0000">&nbsp;public void init(){<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;System.out.println("我是初始化函数");<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;public PersonServiceBean(){<br />
&nbsp;&nbsp;System.out.println("我是构造函数");<br />
&nbsp;}<br />
&nbsp;public void Save(){<br />
&nbsp;&nbsp;System.out.println("save方法");<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;public void cleanup(){<br />
&nbsp;&nbsp;System.out.println("cleanup方法");<br />
&nbsp;}<br />
}<br />
<br />
<br />
&lt;bean id="personService"<br />
&nbsp;&nbsp;class="cn.itcast.service.impl.PersonServiceBean" <br />
&nbsp;&nbsp; init-method="init" destroy-method="cleanup"/&gt;<br />
<br />
@Test public void instanceSpring(){<br />
&nbsp;&nbsp;ClassPathXmlApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");<br />
&nbsp;&nbsp;IPersonService ipersonService=(IPersonService)ctx.getBean("personService");<br />
&nbsp;ctx.close();</span></span></p>
<img src ="http://www.blogjava.net/phoebird/aggbug/292606.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/phoebird/" target="_blank">笑口常开、财源滚滚来！</a> 2009-08-26 10:32 <a href="http://www.blogjava.net/phoebird/archive/2009/08/26/292606.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>第五讲 --配置Spring管理的bean的作用域</title><link>http://www.blogjava.net/phoebird/archive/2009/08/25/292497.html</link><dc:creator>笑口常开、财源滚滚来！</dc:creator><author>笑口常开、财源滚滚来！</author><pubDate>Tue, 25 Aug 2009 04:06:00 GMT</pubDate><guid>http://www.blogjava.net/phoebird/archive/2009/08/25/292497.html</guid><wfw:comment>http://www.blogjava.net/phoebird/comments/292497.html</wfw:comment><comments>http://www.blogjava.net/phoebird/archive/2009/08/25/292497.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/phoebird/comments/commentRss/292497.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/phoebird/services/trackbacks/292497.html</trackback:ping><description><![CDATA[<span style="font-size: 18pt"><strong><span style="font-size: medium">Bean的作用域</span></strong> </span>
<p><strong></strong></p>
<p><span style="font-size: 18pt">.<span style="color: red">singleton </span></span></p>
<p><br />
<span style="color: red"><span style="font-size: 18pt">&nbsp;在每个Spring IoC容器中一个bean定义只有一个对象实例。默认情况下会在容器启动时初始化bean，但我们可以指定Bean节点的lazy-init=&#8220;true&#8221;来延迟初始化bean，这时候，只有第一次获取bean会才初始化bean。如：<br />
&nbsp;&lt;bean id="xxx" class="cn.itcast.OrderServiceBean" lazy-init="true"/&gt;<br />
如果想对所有bean都应用延迟初始化，可以在根节点beans设置default-lazy-init=&#8220;true&#8220;，如下：<br />
&lt;beans default-lazy-init="true&#8220; ...&gt;</span></span></p>
<p><br />
<span style="color: red"><span style="font-size: 18pt">.prototype <br />
&nbsp;每次从容器获取bean都是新的对象。<br />
&nbsp;<br />
.request <br />
.session <br />
.global session</span></span></p>
<p><span style="color: red"><span style="font-size: 18pt">&nbsp;</span></span></p>
<p><span style="color: red"><span style="font-size: 18pt">ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");<br />
&nbsp;&nbsp;PersionSevice ps=(PersionSevice)ctx.getBean("persionServiceBean");<br />
&nbsp;&nbsp;PersionSevice ps2=(PersionSevice)ctx.getBean("persionServiceBean");<br />
&nbsp;&nbsp;System.out.println(ps==ps2);</span></span></p>
<p><span style="color: red"><span style="font-size: 18pt">&nbsp;输出:true</span></span></p>
<p><span style="color: red"><span style="font-size: 18pt">可见spring容器默认的bean的产生方式是单例</span></span></p>
<p><span style="color: red"><span style="font-size: 18pt">&nbsp;</span></span></p>
<p><span style="color: red"><span style="font-size: 18pt">改</span></span></p>
<p><span style="color: red"><span style="font-size: 18pt">&nbsp;&lt;bean id="persionServiceBean" class="cn.com.xinli.service.impl.PersionServiceBean" <strong><span style="color: #ff0000">scope="prototype"</span></strong>&gt;&lt;/bean&gt;&nbsp; </span></span></p>
<p><span style="color: red"><span style="font-size: 18pt">&nbsp;</span></span></p>
<p><span style="color: red"><span style="font-size: 18pt">这时候输出：false ,显然ps与ps2就不一样。<br />
</span></span></p>
<img src ="http://www.blogjava.net/phoebird/aggbug/292497.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/phoebird/" target="_blank">笑口常开、财源滚滚来！</a> 2009-08-25 12:06 <a href="http://www.blogjava.net/phoebird/archive/2009/08/25/292497.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>第四 Spring 的三种实例化bean方式</title><link>http://www.blogjava.net/phoebird/archive/2009/08/25/292496.html</link><dc:creator>笑口常开、财源滚滚来！</dc:creator><author>笑口常开、财源滚滚来！</author><pubDate>Tue, 25 Aug 2009 03:59:00 GMT</pubDate><guid>http://www.blogjava.net/phoebird/archive/2009/08/25/292496.html</guid><wfw:comment>http://www.blogjava.net/phoebird/comments/292496.html</wfw:comment><comments>http://www.blogjava.net/phoebird/archive/2009/08/25/292496.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/phoebird/comments/commentRss/292496.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/phoebird/services/trackbacks/292496.html</trackback:ping><description><![CDATA[<p><span style="font-size: medium"><strong><span style="font-size: 14pt">三种实例化bean的方式</span></strong></span></p>
<p><strong></strong><span style="font-size: 14pt">&nbsp;</span></p>
<p><span style="font-size: 14pt"><strong><span style="color: #ff0000">1.使用类构造器实例化</span></strong><br />
&lt;bean id=&#8220;orderService" class="cn.itcast.OrderServiceBean"/&gt;</span></p>
<p><span style="font-size: 14pt">&nbsp;</span></p>
<p><span style="font-size: 14pt">&nbsp;</span></p>
<p><br />
<span style="font-size: 14pt"><strong><span style="color: #ff0000">2.使用静态工厂方法实例化</span></strong><br />
&lt;bean id="persionServiceBean2" class="cn.com.xinli.service.impl.PersionServiceBeanFactory" <span style="color: #ff0000">factory-method</span>="createPersionServiceBean"/&gt;</span></p>
<p><span style="font-size: 14pt">&nbsp;</span></p>
<p><span style="font-size: 14pt">public class PersionServiceBeanFactory<br />
{<br />
&nbsp;public <strong><span style="color: #ff0000">static</span></strong> PersionServiceBean createPersionServiceBean()<br />
&nbsp;{<br />
&nbsp;&nbsp;return new PersionServiceBean();<br />
&nbsp;}<br />
}</span></p>
<p><span style="font-size: 14pt">&nbsp;</span></p>
<p><span style="font-size: 14pt">例子:</span></p>
<p><span style="font-size: 14pt">&nbsp;</span></p>
<p><span style="font-size: 14pt">(1).首先写工厂类.他其中包含产生我们的业务bean的方法</span></p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><span style="font-size: 14pt">Java代码 </span><a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://8366.javaeye.com/blog/394670#"><span style="font-size: 14pt"><img alt="复制代码" src="http://8366.javaeye.com/images/icon_copy.gif" /></span></a></div>
</div>
<ol class="dp-j">
    <li><span style="font-size: 14pt"><span><span class="keyword">package</span><span>&nbsp;cn.com.xinli.service.impl; &nbsp;&nbsp;</span></span> </span>
    <li><span style="font-size: 14pt"><span>&nbsp;&nbsp;</span> </span>
    <li><span style="font-size: 14pt"><span>&nbsp;&nbsp;</span> </span>
    <li><span style="font-size: 14pt"><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;PersionServiceBeanFactory &nbsp;&nbsp;</span></span> </span>
    <li><span style="font-size: 14pt"><span>{ &nbsp;&nbsp;</span> </span>
    <li><span style="font-size: 14pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;PersionServiceBean&nbsp;createPersionServiceBean() &nbsp;&nbsp;</span></span> </span>
    <li><span style="font-size: 14pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span> </span>
    <li><span style="font-size: 14pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">new</span><span>&nbsp;PersionServiceBean(); &nbsp;&nbsp;</span></span> </span>
    <li><span style="font-size: 14pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </span>
    <li><span style="font-size: 14pt"><span>}&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
<pre class="java" style="display: none" name="code"><span style="font-size: 14pt">package cn.com.xinli.service.impl;
public class PersionServiceBeanFactory
{
public static PersionServiceBean createPersionServiceBean()
{
return new PersionServiceBean();
}
}
</span></pre>
<p><span style="font-size: 14pt">&nbsp;</span></p>
<p><span style="font-size: 14pt">(2).改写beans.xml :包含工厂类类名和产生业务bean的方法名字</span></p>
<p><span style="font-size: 14pt">&nbsp;</span></p>
<p><span style="font-size: 14pt">&nbsp;&lt;bean id="persionServiceBean2" class="cn.com.xinli.service.impl.PersionServiceBeanFactory" <span style="color: #ff0000">factory-method</span>="createPersionServiceBean"/&gt;</span></p>
<p><span style="font-size: 14pt">&nbsp;</span></p>
<p><span style="font-size: 14pt">&nbsp;(3) 测试</span></p>
<p><span style="font-size: 14pt">&nbsp;</span></p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><span style="font-size: 14pt">Java代码 </span><a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://8366.javaeye.com/blog/394670#"><span style="font-size: 14pt"><img alt="复制代码" src="http://8366.javaeye.com/images/icon_copy.gif" /></span></a></div>
</div>
<ol class="dp-j">
    <li><span style="font-size: 14pt"><span><span>ClassPathXmlApplicationContext&nbsp;ctx&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;ClassPathXmlApplicationContext(</span><span class="string">"beans.xml"</span><span>); &nbsp;&nbsp;</span></span> </span>
    <li><span style="font-size: 14pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PersionSevice&nbsp;ps=(PersionSevice)ctx.getBean(</span><span class="string">"persionServiceBean2"</span><span>); &nbsp;&nbsp;</span></span> </span>
    <li><span style="font-size: 14pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </span>
    <li><span style="font-size: 14pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ps.save();&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
<pre class="java" style="display: none" name="code"><span style="font-size: 14pt">ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
PersionSevice ps=(PersionSevice)ctx.getBean("persionServiceBean2");
ps.save();</span></pre>
<p><span style="font-size: 14pt">&nbsp;(4) 结果</span></p>
<p><span style="font-size: 14pt">&nbsp;</span></p>
<p><span style="font-size: 14pt">2009-05-24 14:34:00,781&nbsp; INFO (PersionServiceBean.java:12) - 我是save()方法!</span></p>
<p><span style="font-size: 14pt">&nbsp;</span></p>
<p><br />
<span style="color: #ff0000"><strong><span style="font-size: 14pt">3.使用实例工厂方法实例化:</span></strong></span></p>
<p><span style="font-size: 14pt">&nbsp;</span></p>
<p><span style="font-size: 14pt">&lt;bean id="PersionServiceBeanFactory" class="cn.com.xinli.service.impl.PersionServiceBeanFactory"&gt;&lt;/bean&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;bean id="persionServiceBean3" factory-bean="PersionServiceBeanFactory" factory-method="createPersionServiceBean2"&gt;&lt;/bean&gt;</span></p>
<p><span style="font-size: 14pt">&nbsp;</span></p>
<p><span style="font-size: 14pt">public&nbsp; PersionServiceBean createPersionServiceBean2()<br />
&nbsp;{<br />
&nbsp;&nbsp;return new PersionServiceBean();<br />
&nbsp;}</span></p>
<p><span style="font-size: 14pt">&nbsp;</span></p>
<p><span style="font-size: 14pt">例子:</span></p>
<p><span style="font-size: 14pt">&nbsp;</span></p>
<p><span style="font-size: 14pt">(1).&nbsp;首先写工厂类.他其中包含产生我们的业务bean的方法&nbsp;,在已有代码的基础上</span></p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><span style="font-size: 14pt">Java代码 </span><a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://8366.javaeye.com/blog/394670#"><span style="font-size: 14pt"><img alt="复制代码" src="http://8366.javaeye.com/images/icon_copy.gif" /></span></a></div>
</div>
<ol class="dp-j">
    <li><span style="font-size: 14pt"><span><span class="keyword">package</span><span>&nbsp;cn.com.xinli.service.impl; &nbsp;&nbsp;</span></span> </span>
    <li><span style="font-size: 14pt"><span>&nbsp;&nbsp;</span> </span>
    <li><span style="font-size: 14pt"><span>&nbsp;&nbsp;</span> </span>
    <li><span style="font-size: 14pt"><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;PersionServiceBeanFactory &nbsp;&nbsp;</span></span> </span>
    <li><span style="font-size: 14pt"><span>{ &nbsp;&nbsp;</span> </span>
    <li><span style="font-size: 14pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;PersionServiceBean&nbsp;createPersionServiceBean() &nbsp;&nbsp;</span></span> </span>
    <li><span style="font-size: 14pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span> </span>
    <li><span style="font-size: 14pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">new</span><span>&nbsp;PersionServiceBean(); &nbsp;&nbsp;</span></span> </span>
    <li><span style="font-size: 14pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </span>
    <li><span style="font-size: 14pt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </span>
    <li><span style="font-size: 14pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;SPAN&nbsp;style=</span><span class="string">"COLOR:&nbsp;#ff0000"</span><span>&gt;</span><span class="keyword">public</span><span>&nbsp;&nbsp;PersionServiceBean&nbsp;createPersionServiceBean2() &nbsp;&nbsp;</span></span> </span>
    <li><span style="font-size: 14pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span> </span>
    <li><span style="font-size: 14pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">new</span><span>&nbsp;PersionServiceBean(); &nbsp;&nbsp;</span></span> </span>
    <li><span style="font-size: 14pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&lt;/SPAN&gt; &nbsp;&nbsp;</span> </span>
    <li><span style="font-size: 14pt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </span>
    <li><span style="font-size: 14pt"><span>}&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
<pre class="java" style="display: none" name="code"><span style="font-size: 14pt">package cn.com.xinli.service.impl;
public class PersionServiceBeanFactory
{
public static PersionServiceBean createPersionServiceBean()
{
return new PersionServiceBean();
}
</span><span style="font-size: 14pt"><span style="color: #ff0000">public  PersionServiceBean createPersionServiceBean2()
{
return new PersionServiceBean();
}</span>
}
</span></pre>
<p><span style="font-size: 14pt">&nbsp;</span></p>
<p><span style="font-size: 14pt">&nbsp;</span></p>
<p><span style="font-size: 14pt">(2).改写beans.xml :写两个bean,一个是工厂bean,一个是利用工厂bean产生业务bean的bean.</span></p>
<p><span style="font-size: 14pt">&nbsp;</span></p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><span style="font-size: 14pt">Xml代码 </span><a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://8366.javaeye.com/blog/394670#"><span style="font-size: 14pt"><img alt="复制代码" src="http://8366.javaeye.com/images/icon_copy.gif" /></span></a></div>
</div>
<ol class="dp-xml">
    <li><span style="font-size: 14pt"><span><span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">"PersionServiceBeanFactory"</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"cn.com.xinli.service.impl.PersionServiceBeanFactory"</span><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">bean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span> </span>
    <li><span style="font-size: 14pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">"persionServiceBean3"</span><span>&nbsp;</span><span class="attribute">factory-bean</span><span>=</span><span class="attribute-value">"PersionServiceBeanFactory"</span><span>&nbsp;</span><span class="attribute">factory-method</span><span>=</span><span class="attribute-value">"createPersionServiceBean2"</span><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">bean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span> </span></li>
</ol>
</div>
<pre class="xml" style="display: none" name="code"><span style="font-size: 14pt">&lt;bean id="PersionServiceBeanFactory" class="cn.com.xinli.service.impl.PersionServiceBeanFactory"&gt;&lt;/bean&gt;
&lt;bean id="persionServiceBean3" factory-bean="PersionServiceBeanFactory" factory-method="createPersionServiceBean2"&gt;&lt;/bean&gt;</span></pre>
<p><span style="font-size: 14pt">&nbsp;</span></p>
<p><span style="font-size: 14pt">&nbsp;(3) 测试</span></p>
<p><span style="font-size: 14pt">&nbsp;</span></p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><span style="font-size: 14pt">Java代码 </span><a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://8366.javaeye.com/blog/394670#"><span style="font-size: 14pt"><img alt="复制代码" src="http://8366.javaeye.com/images/icon_copy.gif" /></span></a></div>
</div>
<ol class="dp-j">
    <li><span style="font-size: 14pt"><span><span>ClassPathXmlApplicationContext&nbsp;ctx&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;ClassPathXmlApplicationContext(</span><span class="string">"beans.xml"</span><span>); &nbsp;&nbsp;</span></span> </span>
    <li><span style="font-size: 14pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PersionSevice&nbsp;ps=(PersionSevice)ctx.getBean(</span><span class="string">"persionServiceBean3"</span><span>); &nbsp;&nbsp;</span></span> </span>
    <li><span style="font-size: 14pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </span>
    <li><span style="font-size: 14pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ps.save();&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
<pre class="java" style="display: none" name="code"><span style="font-size: 14pt">ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
PersionSevice ps=(PersionSevice)ctx.getBean("persionServiceBean3");
ps.save();</span></pre>
<p><span style="font-size: 14pt">&nbsp;(4) 结果</span></p>
<p><span style="font-size: 14pt">&nbsp;</span></p>
<p><span style="font-size: 14pt">2009-05-24 14:49:17,812&nbsp; INFO (PersionServiceBean.java:12) - 我是save()方法!</span></p>
<p><span style="font-size: 14pt">&nbsp;</span></p>
<p><span style="font-size: 14pt">&nbsp;(5) 注意,其实方式2和方式3的区别就在 工厂类中是如何产生业务bean的,方式2是<span style="color: #ff0000"><strong>static</strong></span>方式,方式3不是</span></p>
<img src ="http://www.blogjava.net/phoebird/aggbug/292496.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/phoebird/" target="_blank">笑口常开、财源滚滚来！</a> 2009-08-25 11:59 <a href="http://www.blogjava.net/phoebird/archive/2009/08/25/292496.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>