??xml version="1.0" encoding="utf-8" standalone="yes"?>搞黄视频免费在线观看,免费一级在线观看播放网址,一区二区三区中文http://www.aygfsteel.com/phoebird/category/41399.html勤练内功Q不断实跉|数。争取早日成为武林高手?/description>zh-cnSun, 13 Sep 2009 15:36:38 GMTSun, 13 Sep 2009 15:36:38 GMT60Spring 2.5整合 hibernate3.3http://www.aygfsteel.com/phoebird/archive/2009/09/13/294941.htmlW口常开、胦源滚滚来Q?/dc:creator>W口常开、胦源滚滚来Q?/author>Sun, 13 Sep 2009 08:38:00 GMThttp://www.aygfsteel.com/phoebird/archive/2009/09/13/294941.htmlhttp://www.aygfsteel.com/phoebird/comments/294941.htmlhttp://www.aygfsteel.com/phoebird/archive/2009/09/13/294941.html#Feedback0http://www.aygfsteel.com/phoebird/comments/commentRss/294941.htmlhttp://www.aygfsteel.com/phoebird/services/trackbacks/294941.htmlpackage cn.itcast.bean;

public class Person {

 private Integer id;
 private String name;
 
 public Person(){
  
 }
 
 public Person(String name) {
  this.name=name;
 }
 
   getter&&setterҎ 
}


Person.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.itcast.bean">
 <class name="Person" table="person">
 
  <id name="id" type="integer">
   <generator class="native"></generator>
  </id>
  <property name="name" length="10" not-null="true">
  </property>
 </class>

</hibernate-mapping>

定义业务接口

package cn.itcast.service;

import java.util.List;

import cn.itcast.bean.Person;

public interface IPersonService {

 /**
  * 保存人员信息
  * @param person
  */
 public abstract void save(Person person);

 /**
  * 更新信息
  * @param person
  */
 public abstract void update(Person person);

 /**
  * 获取人员
  * @param personId
  * @return
  */
 public abstract Person getPerson(Integer personId);

 /**
  * 删除人员信息
  * @param personId
  */
 public abstract void delete(Integer personId);

 /**
  * 获取人员列表
  * @return
  */
 public abstract List<Person> getPersons();

}


业务实现c?br />

package cn.itcast.service.impl;

import java.util.List;

import javax.annotation.Resource;

import org.hibernate.SessionFactory;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import cn.itcast.bean.Person;
import cn.itcast.service.IPersonService;

/**
 * 业务层,采用注解声明事务
 *
 * @author Administrator
 *
 */
@Transactional
public class PersonServiceBean implements IPersonService {

 @Resource
 private SessionFactory sessionFactory;

 public void save(Person person) {

  // 从spring 容器中得到正在管理的sessionFactory,persistҎ用于保存实体

  sessionFactory.getCurrentSession().persist(person);

 }

 public void update(Person person) {
  sessionFactory.getCurrentSession().merge(person);
 }
@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)
 public Person getPerson(Integer personId) {
  return (Person) sessionFactory.getCurrentSession().get(Person.class,
    personId);
 }

 public void delete(Integer personId) {
  sessionFactory.getCurrentSession()
    .delete(
      sessionFactory.getCurrentSession().load(Person.class,
        personId));
 }
 @Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)
 @SuppressWarnings("unchecked")
 public List<Person> getPersons() {
  return sessionFactory.getCurrentSession().createQuery("from Person")
    .list();
 }

}


hibernate && spring的配|文?br /> beans.xml

<?xml version="1.0" encoding="UTF-8"?>

<!--
 - Application context definition for JPetStore's business layer.
 - Contains bean references to the transaction manager and to the DAOs in
 - dataAccessContext-local/jta.xml (see web.xml's "contextConfigLocation").
-->
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:aop="http://www.springframework.org/schema/aop"
 xmlns:tx="http://www.springframework.org/schema/tx"
 xsi:schemaLocation="
   http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
   http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
   http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
   http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">

 <context:annotation-config />
 <!-- 配置数据?-->
 <bean id="dataSource"
  class="org.apache.commons.dbcp.BasicDataSource"
  destroy-method="close">
  <property name="driverClassName"
   value="org.gjt.mm.mysql.Driver" />
  <property name="url"
   value="jdbc:mysql://localhost:3306/itcast?useUnicode=true&amp;characterEncoding=UTF-8" />
  <property name="username" value="root" />
  <property name="password" value="" />
  <!-- q接池启动时的初始?-->
  <property name="initialSize" value="1" />
  <!-- q接池的最大?-->
  <property name="maxActive" value="500" />
  <!-- 最大空闲?当经q一个高峰时间后Q连接池可以慢慢已l用不到的连接慢慢释放一部分Q一直减到maxIdle为止 -->
  <property name="maxIdle" value="2" />
  <!--  最空闲?当空闲的q接数少于阀值时Q连接池׃预申请去一些连接,以免z峰来时来不及申?-->
  <property name="minIdle" value="1" />
 </bean>

 <bean id="sessionFactory"
  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="dataSource" ref="dataSource" /><!-- datasource注入到sessionFactory -->
  <property name="mappingResources">
   <list>
    <value>cn/itcast/bean/Person.hbm.xml</value>
   </list>
  </property>
  <property name="hibernateProperties">
   <value>
    hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
    hibernate.hbm2ddl.auto=update hibernate.show_sql=false
    hibernate.format_sql=false
   </value>
  </property>
 </bean>

 <!--  通过事务理 理sessionFactory -->
 <bean id="txManager"
  class="org.springframework.orm.hibernate3.HibernateTransactionManager">

  <property name="sessionFactory" ref="sessionFactory" />
 </bean>

 <tx:annotation-driven transaction-manager="txManager" />
 <bean id="personServiceBean"
  class="cn.itcast.service.impl.PersonServiceBean">
 </bean>
</beans>



/**
试c?*/

package junit;


import java.util.List;

import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import cn.itcast.bean.Person;
import cn.itcast.service.IPersonService;

public class IPersonServiceTest {

 private static IPersonService ipersonservice;
 @BeforeClass
 public static void setUpBeforeClass() throws Exception {
  try {
   ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");
   ipersonservice=(IPersonService)ctx.getBean("personServiceBean");
  } catch (RuntimeException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 
 @Test
 public void TestSave(){
  
  ipersonservice.save(new Person("张"));
  System.out.println("保存成功");
 }

 @Test public void testGetPerson(){
  Person person=ipersonservice.getPerson(1);
  System.out.println(person.getName());
 }
 
 @Test public void testUpdate(){
  Person person=ipersonservice.getPerson(1);
  person.setName("丽");
  ipersonservice.update(person);
 }
 
 @Test public void testGetPersons(){
  List<Person> persons=ipersonservice.getPersons();
  for(Person person : persons){
   System.out.println(person.getId()+"  :" +person.getName());
  }
 }
 
 @Test public void testDelete(){
  ipersonservice.delete(1);
 }
}

table :person
id  int
name varchar



]]>
spring 两种切面声明方式http://www.aygfsteel.com/phoebird/archive/2009/09/02/293570.htmlW口常开、胦源滚滚来Q?/dc:creator>W口常开、胦源滚滚来Q?/author>Wed, 02 Sep 2009 04:14:00 GMThttp://www.aygfsteel.com/phoebird/archive/2009/09/02/293570.htmlhttp://www.aygfsteel.com/phoebird/comments/293570.htmlhttp://www.aygfsteel.com/phoebird/archive/2009/09/02/293570.html#Feedback0http://www.aygfsteel.com/phoebird/comments/commentRss/293570.htmlhttp://www.aygfsteel.com/phoebird/services/trackbacks/293570.html       ZXML配置方式声明切面?br />       Z注解方式声明切面?br /> 要进行AOP~程Q首先我们要在spring的配|文件中引入aop命名I间Q?br /> <beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
</beans>


Z注解方式声明切面

@Aspect
public class LogPrint {
 @Pointcut("execution(* cn.itcast.service..*.*(..))")
 private void anyMethod() {}//声明一个切入点 
 @Before("anyMethod() && args(userName)")//定义前置通知
 public void doAccessCheck(String userName) {
 } 
 @AfterReturning(pointcut="anyMethod()",returning="revalue")//定义后置通知
 public void doReturnCheck(String revalue) {
 }
 @AfterThrowing(pointcut="anyMethod()", throwing="ex")//定义例外通知
    public void doExceptionAction(Exception ex) {
 }
 @After("anyMethod()")//定义最l通知
 public void doReleaseAction() {
 }
 @Around("anyMethod()")//环绕通知
 public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable {
  return pjp.proceed();
 }
}



ZZXML配置方式声明切面


public class LogPrint {
 public void doAccessCheck() {}定义前置通知
 public void doReturnCheck() {}定义后置通知
    public void doExceptionAction() {}定义例外通知
 public void doReleaseAction() {}定义最l通知
 public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable {
  return pjp.proceed();环绕通知
 }
}


<bean id="orderservice" class="cn.itcast.service.OrderServiceBean"/>
<bean id="log" class="cn.itcast.service.LogPrint"/>
<aop:config>
  <aop:aspect id="myaop" ref="log">
   <aop:pointcut id="mycut" expression="execution(* cn.itcast.service..*.*(..))"/>
   <aop:before pointcut-ref="mycut" method="doAccessCheck"/>
   <aop:after-returning pointcut-ref="mycut" method="doReturnCheck "/>
   <aop:after-throwing pointcut-ref="mycut" method="doExceptionAction"/>
   <aop:after pointcut-ref="mycut" method=“doReleaseAction"/>
   <aop:around pointcut-ref="mycut" method="doBasicProfiling"/>
  </aop:aspect>
</aop:config>
 



]]>
转蝲 Spring的架?/title><link>http://www.aygfsteel.com/phoebird/archive/2009/08/28/292930.html</link><dc:creator>W口常开、胦源滚滚来Q?/dc:creator><author>W口常开、胦源滚滚来Q?/author><pubDate>Fri, 28 Aug 2009 01:53:00 GMT</pubDate><guid>http://www.aygfsteel.com/phoebird/archive/2009/08/28/292930.html</guid><wfw:comment>http://www.aygfsteel.com/phoebird/comments/292930.html</wfw:comment><comments>http://www.aygfsteel.com/phoebird/archive/2009/08/28/292930.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/phoebird/comments/commentRss/292930.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/phoebird/services/trackbacks/292930.html</trackback:ping><description><![CDATA[转蝲Qhttp://hi.baidu.com/panqf/blog/item/b0db04874b1ccb2bc65cc313.html<br /> <br />  Spring 框架是一个分层架构,?7 个定义良好的模块l成。Spring 模块构徏在核心容器之上,核心容器定义了创建、配|和理 bean 的方式,如图 1 所C?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>l成 Spring 框架的每个模块(或组Ӟ都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下Q?</p> <ul> <li><strong>核心容器</strong>Q核心容器提?Spring 框架的基本功能。核心容器的主要lg?<code>BeanFactory</code>Q它是工厂模式的实现?code>BeanFactory</code> 使用<em>控制反{</em> QIOCQ?模式应用程序的配置和依赖性规范与实际的应用程序代码分开? <li><strong>Spring 上下?/strong>QSpring 上下文是一个配|文Ӟ?Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能? <li><strong>Spring AOP</strong>Q?通过配置理Ҏ,Spring AOP 模块直接面向方面的~程功能集成C Spring 框架中。所以,可以很容易地?Spring 框架理的Q何对象支?AOP。Spring AOP 模块为基?Spring 的应用程序中的对象提供了事务理服务。通过使用 Spring AOPQ不用依?EJB lgQ就可以声明性事务管理集成到应用E序中? <li><strong>Spring DAO</strong>QJDBC DAO 抽象层提供了有意义的异常层次l构Q可用该l构来管理异常处理和不同数据库供应商抛出的错误消息。异常层ơ结构简化了错误处理Qƈ且极大地降低了需要编?的异总码数量(例如打开和关闭连接)。Spring DAO 的面?JDBC 的异帔R从通用?DAO 异常层次l构? <li><strong>Spring ORM</strong>QSpring 框架插入了若q个 ORM 框架Q从而提供了 ORM 的对象关pdP其中包括 JDO、Hibernate ?iBatis SQL Map。所有这些都遵从 Spring 的通用事务?DAO 异常层次l构? <li><strong>Spring Web 模块</strong>QWeb 上下文模块徏立在应用E序上下文模块之上,为基?Web 的应用程序提供了上下文。所以,Spring 框架支持?Jakarta Struts 的集成。Web 模块q简化了处理多部分请求以及将h参数l定到域对象的工作? <li><strong>Spring MVC 框架</strong>QMVC 框架是一个全功能的构?Web 应用E序?MVC 实现。通过{略接口QMVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText ?POI?</li> </ul> <p>        Spring 框架的功能可以用在Q?J2EE 服务器中Q大多数功能也适用于不受管理的环境。Spring 的核心要ҎQ支持不l定到特?J2EE 服务的可重用业务和数据访问对象。毫无疑问,q样的对象可以在不同 J2EE 环境 QWeb ?EJBQ、独立应用程序、测试环境之间重用?<br /> </p> <p><br /> </p> <img src ="http://www.aygfsteel.com/phoebird/aggbug/292930.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/phoebird/" target="_blank">W口常开、胦源滚滚来Q?/a> 2009-08-28 09:53 <a href="http://www.aygfsteel.com/phoebird/archive/2009/08/28/292930.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>集合对象注入&&通过构造函数注?/title><link>http://www.aygfsteel.com/phoebird/archive/2009/08/27/292862.html</link><dc:creator>W口常开、胦源滚滚来Q?/dc:creator><author>W口常开、胦源滚滚来Q?/author><pubDate>Thu, 27 Aug 2009 10:19:00 GMT</pubDate><guid>http://www.aygfsteel.com/phoebird/archive/2009/08/27/292862.html</guid><wfw:comment>http://www.aygfsteel.com/phoebird/comments/292862.html</wfw:comment><comments>http://www.aygfsteel.com/phoebird/archive/2009/08/27/292862.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.aygfsteel.com/phoebird/comments/commentRss/292862.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/phoebird/services/trackbacks/292862.html</trackback:ping><description><![CDATA[<p>public interface <span style="color: red">IPersonService </span>{</p> <p> public abstract void Save();<br />  public Set<String> getSets() ;<br />  public List<String> getLists() ;<br />  public Properties getProperties() ;<br />  public Map<String, String> getMaps() ;</p> <p>}</p> <br /> <br /> <p>public class <span style="color: red">PersonServiceBean </span>implements IPersonService {</p> <p> private IPersonDao iPersonDao;<br />  private Set<String> sets=new HashSet<String>();<br />  private List<String> lists=new ArrayList<String>();<br />  private Properties properties=new Properties();<br />  private Map<String,String> maps=new HashMap<String,String>();<br />  <br />  public PersonServiceBean(IPersonDao personDao, String name) {<br />   <br />   iPersonDao = personDao;<br />   this.name = name;<br />  }<br />  public void Save(){<br />   System.out.println(name);//输出name<br />   iPersonDao.add();<br />  }</p> <p> private String name;<br />  <br />  public String getName() {<br />   return name;<br />  }</p> <p> public void setName(String name) {<br />   this.name = name;<br />  }</p> <p> public Map<String, String> getMaps() {<br />   return maps;<br />  }</p> <p> public void setMaps(Map<String, String> maps) {<br />   this.maps = maps;<br />  }</p> <p> public Properties getProperties() {<br />   return properties;<br />  }</p> <p> public void setProperties(Properties properties) {<br />   this.properties = properties;<br />  }</p> <p> public Set<String> getSets() {<br />   return sets;<br />  }</p> <p> public void setSets(Set<String> sets) {<br />   this.sets = sets;<br />  }</p> <p> public IPersonDao getIPersonDao() {<br />   return iPersonDao;<br />  }</p> <p> public void setIPersonDao(IPersonDao personDao) {<br />   iPersonDao = personDao;<br />  }</p> <p> <br />  public List<String> getLists() {<br />   return lists;<br />  }</p> <p> public void setLists(List<String> lists) {<br />   this.lists = lists;<br />  }<br /> }<br /> <br /> <br /> <br /> 试c:</p> <p>public class <span style="color: red">SpringTest </span>{</p> <p> @BeforeClass<br />  public static void setUpBeforeClass() throws Exception {<br />  }<br />  @Test<br />  public void instanceSpring() {<br />   ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(<br />     "beans.xml");<br />   // ItcastClassPathXMLApplicationContext ctx=new<br />   // ItcastClassPathXMLApplicationContext("beans.xml");<br />   //  <br />   IPersonService ipersonService = (IPersonService) ctx<br />     .getBean("personService");<br />   //集合对象的遍?br />   System.out.println("===========set==================");<br />   for (String value : ipersonService.getSets()) {<br />    <br />    System.out.println(value);<br />   }<br />   // ipersonService.Save();<br />   // ctx.close();<br />   // ctx.registerShutdownHook();<br />   System.out.println("===========List=================");<br />   for(String value:ipersonService.getLists()){<br />    <br />    System.out.println(value);<br />   }<br />   <br />   System.out.println("=========properties===============");<br />   for(Object value:ipersonService.getProperties().keySet()){<br />    System.out.println(value);<br />   }<br />   System.out.println("================maps==================");<br />   for(Object value:ipersonService.getMaps().keySet()){<br />    System.out.println(value);<br />   }<br />   //调用PersonServiceBean的savaҎQ输出结?br />   ipersonService.Save();<br />   <br />  }<br /> }<br /> </p> <br /> <br /> <p><beans xmlns="http://www.springframework.org/schema/beans"<br />  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />  xmlns:aop="http://www.springframework.org/schema/aop"<br />  xmlns:tx="http://www.springframework.org/schema/tx"<br />  xsi:schemaLocation="<br />    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd<br />    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd<br />    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"><br />  <bean id="personService"<br />   class="cn.itcast.service.impl.PersonServiceBean"><br />   <property name="IPersonDao" ref="personDaoBean"></property></p> <p style="color: red">  <constructor-arg index="0" ref="personDaoBean"<br />    type="cn.itcast.dao.IPersonDao" /><br />   <constructor-arg index="1" type="java.lang.String"<br />    value="传智博客"><br />   </constructor-arg></p> <p>  <property name="sets"><br />    <set><br />     <value>set1</value><br />     <value>set2</value><br />     <value>set3</value><br />    </set><br />   </property></p> <p>  <property name="lists"><br />    <list><br />     <value>list1</value><br />     <value>list2</value><br />     <value>list3</value><br />    </list><br />   </property></p> <p>  <property name="properties"><br />    <props><br />     <prop key="properties1">property1</prop><br />     <prop key="properties2">property2</prop><br />     <prop key="properties3">property3</prop><br />    </props><br />   </property></p> <p>  <property name="maps"><br />    <map><br />     <entry key="key1" value="keyFirst"></entry><br />     <entry key="key2" value="keySecond"></entry><br />     <entry key="key3" value="keyThird"></entry><br />    </map><br />   </property><br />  </bean><br />  <bean id="personDaoBean" class="cn.itcast.dao.impl.PersonDaoBean"></bean></p> <p><br />  <!-- <br />   <bean id="anotherPersonServiceBean"<br />   class="cn.itcast.service.impl.AnotherPersonServiceBean" ><br />   </bean><br />  --><br /> </beans><br /> <br /> <br /> public class PersonDaoBean implements IPersonDao {<br />  public void add(){<br />   System.out.println("q是personDaoBean的Add()Ҏ");<br />  }<br /> }</p> <br /> <br /> 输出Q?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 /> q是personDaoBean的Add()Ҏ<br /> <br /> <img src ="http://www.aygfsteel.com/phoebird/aggbug/292862.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/phoebird/" target="_blank">W口常开、胦源滚滚来Q?/a> 2009-08-27 18:19 <a href="http://www.aygfsteel.com/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.aygfsteel.com/phoebird/archive/2009/08/27/292822.html</link><dc:creator>W口常开、胦源滚滚来Q?/dc:creator><author>W口常开、胦源滚滚来Q?/author><pubDate>Thu, 27 Aug 2009 07:03:00 GMT</pubDate><guid>http://www.aygfsteel.com/phoebird/archive/2009/08/27/292822.html</guid><wfw:comment>http://www.aygfsteel.com/phoebird/comments/292822.html</wfw:comment><comments>http://www.aygfsteel.com/phoebird/archive/2009/08/27/292822.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/phoebird/comments/commentRss/292822.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/phoebird/services/trackbacks/292822.html</trackback:ping><description><![CDATA[依赖注入的方式:<br /> W一、通过接口注入<br /> W二、通过构造函数注入,讄对象参数<br /> W三、通过setterҎ注入?br /> 后两者运用居多?br /> <br /> <br /> 通过内部bean注入Q其~点是内部bean只能被一个外部bean使用<br /> 如下Q?br /> <bean id="personService"<br />   class="cn.itcast.service.impl.PersonServiceBean"><br />   <property name="IPersonDao"><br />          <bean class="cn.itcast.dao.impl.PersonDaoBean"></bean><!--   内部bean注入 --><br />   </property><br />   <br />   </bean><br />   也可以换为:通过 ref的方式也是可以的Q其优点是通过ref参数Q可以被多个bean引用?br /> <br /> <bean id="personService"<br />   class="cn.itcast.service.impl.PersonServiceBean"><br />   <property name="IPersonDao" ref="personDaoBean"></property><br />   <br />   </bean><br />   <bean id="personDaoBean" class="cn.itcast.dao.impl.PersonDaoBean"></bean>  <br /> <br /> <br /> 剖析依赖注入的内部机Ӟ通过基本数据cd的向属性值类型的转换<br /> <br /> <br /> <br /> <p>/**<br />  * 实现的spring容器<br />  * <br />  * @author Administrator<br />  * <br />  */<br /> public class ItcastClassPathXMLApplicationContext {</p> <p> private List<BeanDefinition> beanDefines = new ArrayList<BeanDefinition>();<br />  private Map<String, Object> sigletons = new HashMap<String, Object>();</p> <p> public ItcastClassPathXMLApplicationContext() {</p> <p> }</p> <p> public ItcastClassPathXMLApplicationContext(String filename) {<br />   // System.out.println("构造方?");<br />   this.readXml(filename);// 调用 d配置文g 的方?br />   this.instanceBeans();// 调用bean的实例化<br />   this.injectObject();// 注入对象<br />  }</p> <p> /**<br />   * 为bean对象的属性注入?br />   */<br />  private void injectObject() {<br />   for (BeanDefinition beanDefinition : beanDefines) {<br />    Object bean = sigletons.get(beanDefinition.getId());<br />    if (bean != null) {<br />     // 取得属性描q?Q是一个数l?br />     try {<br />      PropertyDescriptor[] ps = Introspector.getBeanInfo(<br />        bean.getClass()).getPropertyDescriptors();<br />      for (PropertyDefinition propertyDefinition : beanDefinition<br />        .getPropertys()) {// 取所有属?br />       for (PropertyDescriptor properdesc : ps) {<br />        if (propertyDefinition.getName().equals(<br />          properdesc.getName())) {<br />         Method setter = properdesc.getWriteMethod();// 获取属性的setterҎ.<br />         // private<br />         <span style="color: #ff0000">if (setter != null) {<br />          Object value=null;<br />          if(propertyDefinition.getRef()!=null && !"".equals(propertyDefinition.getRef().trim())){<br />           value = sigletons<br />             .get(propertyDefinition<br />               .getRef());<br />           <br />          }else{<br />           //配|文仉字符串类型{换ؓ属性类型的?<br />           value=ConvertUtils.convert(propertyDefinition.getValue(), properdesc.getPropertyType());<br />           <br />          }<br />          setter.setAccessible(true);// 讄为可讉K<br />          setter.invoke(bean, value);// 把引用对象注入到属?br /> </span>         <br />         }<br />         break;<br />        }<br />       }<br />      }<br />     } catch (Exception e) {<br />      e.printStackTrace();<br />     }</p> <p>   }<br />   }</p> <p> }</p> <p> /**<br />   * 完成bean的实例化<br />   */<br />  private void instanceBeans() {<br />   // System.out.println("bean实例化方法被调用");<br />   // 利用反射机制把bean实例?br />   for (BeanDefinition beanDefinition : beanDefines) {<br />    try {<br />     // 判断BeanDefinition的实例获得的cd不ؓnull和空?br />     if (beanDefinition.getClassName() != null<br />       && !"".equals(beanDefinition.getClassName().trim()))<br />      sigletons.put(beanDefinition.getId(), Class.forName(<br />        beanDefinition.getClassName()).newInstance());<br />    } catch (Exception e) {<br />     // TODO Auto-generated catch block<br />     e.printStackTrace();<br />    }</p> <p>  }</p> <p> }</p> <p> /**<br />   * d配置文g信息<br />   * <br />   * @param filename<br />   */<br />  private void readXml(String filename) {<br />   // System.out.println("dxml文g的方法被调用?);</p> <p>  SAXReader saxReader = new SAXReader();// 创徏d?br />   Document document = null;<br />   try {<br />    URL xmlpath = this.getClass().getClassLoader()<br />      .getResource(filename);//取得当前xml文g在本地的位置<br />    <br />    document = saxReader.read(xmlpath);// d路径<br />    Map<String, String> nsMap = new HashMap<String, String>();<br />    nsMap.put("ns", "http://www.springframework.org/schema/beans");// 加入命名I间<br />    XPath xsub = document.createXPath("http://ns:beans/ns:bean");// 创徏beans/bean查询路径<br />    xsub.setNamespaceURIs(nsMap);// 讄命名I间<br />    List<Element> beans = xsub.selectNodes(document);// 获取文档下所有bean节点<br />    for (Element element : beans) {<br />     String id = element.attributeValue("id");// 获取id属性?br />     String clazz = element.attributeValue("class");// 获取class属性?br />     BeanDefinition beanDefine = new BeanDefinition(id, clazz);<br />     XPath propertysub = element.createXPath("ns:property");// 船舰查询路径</p> <p>    propertysub.setNamespaceURIs(nsMap);// 讄命名I间<br />     List<Element> propertys = propertysub.selectNodes(element);// 查找节点<br />     for (Element property : propertys) {<br />      String propertyName = property.attributeValue("name");// 取得property的name?br />      String propertyref = property.attributeValue("ref");// 取得property的ref?br />      <span style="color: #ff0000">String propertyValue = property.attributeValue("value");// 取得property的value?/span></p> <p>     PropertyDefinition propertyDefinition = new PropertyDefinition(<br />        propertyName, propertyref,<span style="color: #ff0000">propertyValue</span>);<br />      beanDefine.getPropertys().add(propertyDefinition);// 属性对象加入到bean?br />     }</p> <p>    beanDefines.add(beanDefine);<br />    }<br />   } catch (Exception e) {<br />    e.printStackTrace();</p> <p>  }</p> <p> }</p> <p> /**<br />   * 获取bean 实例<br />   * <br />   * @param beanName<br />   * @return<br />   */<br />  public Object getBean(String beanName) {</p> <p>  <br />   return this.sigletons.get(beanName);<br />  }</p> <p>}<br /> </p> <br />    <br /> <br /> <bean id="personService"<br />   class="cn.itcast.service.impl.PersonServiceBean"><br />   <property name="IPersonDao" ref="personDaoBean"></property><br />   <br />   <property name="name" value="Itcast"></property><br />   <property name="age" value="15"></property><br />   </bean><br />   <bean id="personDaoBean" class="cn.itcast.dao.impl.PersonDaoBean"></bean>  <br />    <br /> <br /> <br /> <p>public class SpringTest {</p> <p> @BeforeClass<br />  public static void setUpBeforeClass() throws Exception {</p> <p> }<br />  @Test<br />  public void instanceSpring() {<br /> //  ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(<br /> //    "beans.xml");<br />   ItcastClassPathXMLApplicationContext ctx=new ItcastClassPathXMLApplicationContext("beans.xml");<br /> //  <br />   IPersonService ipersonService = (IPersonService)ctx<br />     .getBean("personService");<br />   ipersonService.Save();<br />  // ctx.close();<br />   // ctx.registerShutdownHook();</p> <p> }<br /> }<br /> <br /> <br /> public class PropertyDefinition {<br />  private String name;<br />  private String ref;<br />  private String value;<br />  public PropertyDefinition(String name, String ref,String value) {<br />   <br />   this.name = name;<br />   this.ref = ref;<br />   this.value=value;<br />  }<br />  public String getName() {<br />   return name;<br />  }<br />  public void setName(String name) {<br />   this.name = name;<br />  }<br />  public String getRef() {<br />   return ref;<br />  }<br />  public void setRef(String ref) {<br />   this.ref = ref;<br /> }<br /> 其他略?br /> <br /> out:<br /> Itcast<br /> 15<br /> q是personDaoBean的Add()Ҏ<br /> </p> <img src ="http://www.aygfsteel.com/phoebird/aggbug/292822.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/phoebird/" target="_blank">W口常开、胦源滚滚来Q?/a> 2009-08-27 15:03 <a href="http://www.aygfsteel.com/phoebird/archive/2009/08/27/292822.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>W七.二讲自定义依赖注?/title><link>http://www.aygfsteel.com/phoebird/archive/2009/08/27/292816.html</link><dc:creator>W口常开、胦源滚滚来Q?/dc:creator><author>W口常开、胦源滚滚来Q?/author><pubDate>Thu, 27 Aug 2009 06:46:00 GMT</pubDate><guid>http://www.aygfsteel.com/phoebird/archive/2009/08/27/292816.html</guid><wfw:comment>http://www.aygfsteel.com/phoebird/comments/292816.html</wfw:comment><comments>http://www.aygfsteel.com/phoebird/archive/2009/08/27/292816.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/phoebird/comments/commentRss/292816.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/phoebird/services/trackbacks/292816.html</trackback:ping><description><![CDATA[         今天p了半天去写自定义容器Q结果发现还是没发实现功能,无法输出Q结果不断的调试、测试。最后终于搞定了。原来是写代码的时候把<span style="background-color: #ffff00">d配置文g里方法readxmlQ里面读取子属性里面查找节点,调用查找对象搞错?/span>。本?font style="background-color: #ffff00" color="#ff0000">propertysub.selectNodes(element)Q但写ؓ?font color="#ff0000">xsub.selectNodes(element)</font></font>误用Zelement里面查找子节炏V还有就是在//ns:beans/<span style="color: red">ns:bean里面把冒号写成了号Q真是太不仔l了?br /> <br /> 自定义容?br /> <p>/**<br />  * 实现的spring容器<br />  * <br />  * @author Administrator<br />  * <br />  */<br /> <span style="font-size: 14pt">public class ItcastClassPathXMLApplicationContext {</span></p> <p><span style="font-size: 14pt"> private List<BeanDefinition> beanDefines = new ArrayList<BeanDefinition>();<br />  private Map<String, Object> sigletons = new HashMap<String, Object>();</span></p> <p><span style="font-size: 14pt"> public ItcastClassPathXMLApplicationContext() {</span></p> <p><span style="font-size: 14pt"> }</span></p> <p><span style="font-size: 14pt"> public ItcastClassPathXMLApplicationContext(String filename) {<br />   // System.out.println("构造方?");<br />   this.readXml(filename);// 调用 d配置文g 的方?br />   this.instanceBeans();// 调用bean的实例化<br />   this.injectObject();// 注入对象<br />  }</span></p> <p><span style="font-size: 14pt"> /**<br />   * 为bean对象的属性注入?br />   */<br />  private void injectObject() {<br />   for (BeanDefinition beanDefinition : beanDefines) {<br />    Object bean = sigletons.get(beanDefinition.getId());<br />    if (bean != null) {<br />     // 取得属性描q?Q是一个数l?br />     try {<br />      PropertyDescriptor[] ps = Introspector.getBeanInfo(<br />        bean.getClass()).getPropertyDescriptors();<br />      for (PropertyDefinition propertyDefinition : beanDefinition<br />        .getPropertys()) {// 取所有属?br />       for (PropertyDescriptor properdesc : ps) {<br />        if (propertyDefinition.getName().equals(<br />          properdesc.getName())) {<br />         Method setter = properdesc.getWriteMethod();// 获取属性的setterҎ.<br />         // private<br />         if (setter != null) {<br />          Object value = sigletons<br />            .get(propertyDefinition.getRef());<br />          setter.setAccessible(true);// 讄为可讉K<br />          setter.invoke(bean, value);// 把引用对象注入到属?br />         }<br />         break;<br />        }<br />       }<br />      }<br />     } catch (Exception e) {<br />      e.printStackTrace();<br />     }</span></p> <p><span style="font-size: 14pt">   }<br />   }</span></p> <p><span style="font-size: 14pt"> }</span></p> <p><span style="font-size: 14pt"> /**<br />   * 完成bean的实例化<br />   */<br />  private void instanceBeans() {<br />   // System.out.println("bean实例化方法被调用");<br />   // 利用反射机制把bean实例?br />   for (BeanDefinition beanDefinition : beanDefines) {<br />    try {<br />     // 判断BeanDefinition的实例获得的cd不ؓnull和空?br />     if (beanDefinition.getClassName() != null<br />       && !"".equals(beanDefinition.getClassName().trim()))<br />      sigletons.put(beanDefinition.getId(), Class.forName(<br />        beanDefinition.getClassName()).newInstance());<br />    } catch (Exception e) {<br />     // TODO Auto-generated catch block<br />     e.printStackTrace();<br />    }</span></p> <p><span style="font-size: 14pt">  }</span></p> <p><span style="font-size: 14pt"> }</span></p> <p><span style="font-size: 14pt"> /**<br />   * d配置文g信息<br />   * <br />   * @param filename<br />   */<br />  private void readXml(String filename) {<br />   // System.out.println("dxml文g的方法被调用?);</span></p> <p><span style="font-size: 14pt">  SAXReader saxReader = new SAXReader();// 创徏d?br />   Document document = null;<br />   try {<br />    URL xmlpath = this.getClass().getClassLoader()<br />      .getResource(filename);//取得当前xml文g在本地的位置<br />    <br />    document = saxReader.read(xmlpath);// d路径<br />    System.out.println(document);<br />    Map<String, String> nsMap = new HashMap<String, String>();<br />    nsMap.put("ns", "http://www.springframework.org/schema/beans");// 加入命名I间<br />    XPath xsub = document.createXPath("http://ns:beans/ns:bean");// 创徏beans/bean查询路径<br />    xsub.setNamespaceURIs(nsMap);// 讄命名I间<br />    List<Element> beans = xsub.selectNodes(document);// 获取文档下所有bean节点<br />    System.out.println(beans.size());<br />    for (Element element : beans) {<br />     String id = element.attributeValue("id");// 获取id属性?br />     String clazz = element.attributeValue("class");// 获取class属性?br />     BeanDefinition beanDefine = new BeanDefinition(id, clazz);<br />     System.out.println("id=" + id);<br />     System.out.println("clazz=" + clazz);<br />     XPath propertysub = element.createXPath("ns:property");// 船舰查询路径</span></p> <p><span style="font-size: 14pt">    propertysub.setNamespaceURIs(nsMap);// 讄命名I间<br />     List<Element> propertys = propertysub.selectNodes(element);// 查找节点<br />     for (Element property : propertys) {<br />      String propertyName = property.attributeValue("name");// 取得property的name?br />      String propertyref = property.attributeValue("ref");// 取得property的ref?/span></p> <p><span style="font-size: 14pt">     System.out.println(propertyName + "=  " + propertyref);</span></p> <p><span style="font-size: 14pt">     PropertyDefinition propertyDefinition = new PropertyDefinition(<br />        propertyName, propertyref);<br />      beanDefine.getPropertys().add(propertyDefinition);// 属性对象加入到bean?br />     }</span></p> <p><span style="font-size: 14pt">    beanDefines.add(beanDefine);<br />    }<br />   } catch (Exception e) {<br />    e.printStackTrace();</span></p> <p><span style="font-size: 14pt">  }</span></p> <p><span style="font-size: 14pt"> }</span></p> <p><span style="font-size: 14pt"> /**<br />   * 获取bean 实例<br />   * <br />   * @param beanName<br />   * @return<br />   */<br />  public Object getBean(String beanName) {</span></p> <p><span style="font-size: 14pt">  <br />   return this.sigletons.get(beanName);<br />  }</span></p> <p><span style="font-size: 14pt">}<br /> </span></p>  bean.xml配置文g<br /> <br /> <p><?xml version="1.0" encoding="UTF-8"?></p> <p><br /> <span style="background-color: #ccffff"><beans xmlns="http://www.springframework.org/schema/beans"</span><br />  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />  xmlns:aop="http://www.springframework.org/schema/aop"<br />  xmlns:tx="http://www.springframework.org/schema/tx"<br />  xsi:schemaLocation="<br />    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd<br />    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd<br />    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd" <br />   ><br />  <bean id="personService"<br />   class="cn.itcast.service.impl.PersonServiceBean"><br />   <property name="IPersonDao" ref="personDaoBean"></property><br />   <br />   </bean><br />   <bean id="personDaoBean" class="cn.itcast.dao.impl.PersonDaoBean"></bean>  <br /> </beans><br /> </p> <br /> 自定义属性类 PropertyDefinition.java<br /> <p>package junit.test;</p> <p>public class PropertyDefinition {<br />  private String name;<br />  private String ref;<br />  public PropertyDefinition(String name, String ref) {<br />   <br />   this.name = name;<br />   this.ref = ref;<br />  }<br />   getter&setter method</p> <p>}<br /> </p> <br /> 试c: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> @BeforeClass<br />  public static void setUpBeforeClass() throws Exception {</p> <p> }<br />  @Test<br />  public void instanceSpring() {<br /> //  ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(<br /> //    "beans.xml");<br />   <span style="font-size: 18pt; color: #0000ff">ItcastClassPathXMLApplicationContext ctx=new ItcastClassPathXMLApplicationContext("beans.xml");<br />   <br />   IPersonService ipersonService = (IPersonService)ctx<br />     .getBean("personService");//调用自定义容器的getBeanҎ<br />   ipersonService.Save();<br /> </span>//  ctx.close();<br />   // ctx.registerShutdownHook();</p> <p> }<br /> }<br /> </p> 自定义beanc:<br /> <br /> <p>package junit.test;</p> <p>import java.util.ArrayList;<br /> import java.util.List;</p> <p>public class BeanDefinition {<br />  <br />  private String id;<br />  private String className;<br />  private List<PropertyDefinition> propertys=new ArrayList<PropertyDefinition>();<br />  生成getter,setterҎ<br />  }<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 />  public void add(){<br />   System.out.println("q是personDaoBean的Add()Ҏ");<br />  }<br /> }</p> <br /> <br /> <br /> <p>package cn.itcast.service;</p> <p>public interface IPersonService {</p> <p> 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 />  * 业务bean<br />  * @author Administrator<br />  *<br />  */<br /> public class PersonServiceBean implements IPersonService {</p> <p> private IPersonDao iPersonDao;<br />  <br />  public IPersonDao getIPersonDao() {<br />   return iPersonDao;<br />  }</p> <p> public void setIPersonDao(IPersonDao personDao) {<br />   iPersonDao = personDao;<br />  }</p> <p> public void Save(){<br />   iPersonDao.add();<br />  }<br />  <br />  <br /> }<br /> </p> <br /> <br /> q行试c?br /> out:<br />  q是personDaoBean的Add()Ҏ<br /> <br /> <br /> </span> <img src ="http://www.aygfsteel.com/phoebird/aggbug/292816.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/phoebird/" target="_blank">W口常开、胦源滚滚来Q?/a> 2009-08-27 14:46 <a href="http://www.aygfsteel.com/phoebird/archive/2009/08/27/292816.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>W七 --~码剖析Spring依赖注入的原?/title><link>http://www.aygfsteel.com/phoebird/archive/2009/08/26/292621.html</link><dc:creator>W口常开、胦源滚滚来Q?/dc:creator><author>W口常开、胦源滚滚来Q?/author><pubDate>Wed, 26 Aug 2009 03:40:00 GMT</pubDate><guid>http://www.aygfsteel.com/phoebird/archive/2009/08/26/292621.html</guid><wfw:comment>http://www.aygfsteel.com/phoebird/comments/292621.html</wfw:comment><comments>http://www.aygfsteel.com/phoebird/archive/2009/08/26/292621.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/phoebird/comments/commentRss/292621.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/phoebird/services/trackbacks/292621.html</trackback:ping><description><![CDATA[<p>public interface IPersonService {</p> <p> public abstract void Save();</p> <p>}</p> <br /> <br /> <p>public class PersonDaoBean implements IPersonDao {</p> <p> <br />  public void add(){<br />   System.out.println("q是personDaoBean的Add()Ҏ");<br />  }<br /> }<br /> <br /> <br /> </p> <p>public class PersonServiceBean implements IPersonService {</p> <p> private IPersonDao iPersonDao;<br />  <br />  public IPersonDao getIPersonDao() {<br />   return iPersonDao;<br />  }</p> <p> public void setIPersonDao(IPersonDao personDao) {<br />   iPersonDao = personDao;<br />  }</p> <p> public void Save(){<br />   iPersonDao.add();<br />  }<br />  <br />  <br /> }</p> <br /> <br /> <br /> <bean id="personDaoBean" class="cn.itcast.dao.impl.PersonDaoBean"></bean><br />  <bean id="personService"<br />   class="cn.itcast.service.impl.PersonServiceBean"><br />   <property name="IPersonDao" ref="personDaoBean"></property><br />   </bean><br />    <br /> <br /> <p>public void instanceSpring() {<br />   ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(<br />     "beans.xml");<br />   IPersonService ipersonService = (IPersonService) ctx<br />     .getBean("personService");<br />   ipersonService.Save();<br />   ctx.close();<br />   // ctx.registerShutdownHook();</p> <p> }<br /> </p> <br /> <br /> 输出Q这是personDaoBean的Add()Ҏ<br /> <img src ="http://www.aygfsteel.com/phoebird/aggbug/292621.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/phoebird/" target="_blank">W口常开、胦源滚滚来Q?/a> 2009-08-26 11:40 <a href="http://www.aygfsteel.com/phoebird/archive/2009/08/26/292621.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>W六 Spring 理bean的生命周?/title><link>http://www.aygfsteel.com/phoebird/archive/2009/08/26/292606.html</link><dc:creator>W口常开、胦源滚滚来Q?/dc:creator><author>W口常开、胦源滚滚来Q?/author><pubDate>Wed, 26 Aug 2009 02:32:00 GMT</pubDate><guid>http://www.aygfsteel.com/phoebird/archive/2009/08/26/292606.html</guid><wfw:comment>http://www.aygfsteel.com/phoebird/comments/292606.html</wfw:comment><comments>http://www.aygfsteel.com/phoebird/archive/2009/08/26/292606.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/phoebird/comments/commentRss/292606.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/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"> public void init(){<br />   <br />   System.out.println("我是初始化函?);<br />  }<br />  <br />  public PersonServiceBean(){<br />   System.out.println("我是构造函?);<br />  }<br />  public void Save(){<br />   System.out.println("saveҎ");<br />  }<br />  <br />  public void cleanup(){<br />   System.out.println("cleanupҎ");<br />  }<br /> }<br /> <br /> <br /> <bean id="personService"<br />   class="cn.itcast.service.impl.PersonServiceBean" <br />    init-method="init" destroy-method="cleanup"/><br /> <br /> @Test public void instanceSpring(){<br />   ClassPathXmlApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");<br />   IPersonService ipersonService=(IPersonService)ctx.getBean("personService");<br />  ctx.close();</span></span></p> <img src ="http://www.aygfsteel.com/phoebird/aggbug/292606.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/phoebird/" target="_blank">W口常开、胦源滚滚来Q?/a> 2009-08-26 10:32 <a href="http://www.aygfsteel.com/phoebird/archive/2009/08/26/292606.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>W五?--配置Spring理的bean的作用域http://www.aygfsteel.com/phoebird/archive/2009/08/25/292497.htmlW口常开、胦源滚滚来Q?/dc:creator>W口常开、胦源滚滚来Q?/author>Tue, 25 Aug 2009 04:06:00 GMThttp://www.aygfsteel.com/phoebird/archive/2009/08/25/292497.htmlhttp://www.aygfsteel.com/phoebird/comments/292497.htmlhttp://www.aygfsteel.com/phoebird/archive/2009/08/25/292497.html#Feedback0http://www.aygfsteel.com/phoebird/comments/commentRss/292497.htmlhttp://www.aygfsteel.com/phoebird/services/trackbacks/292497.htmlBean的作用域

.singleton


 在每个Spring IoC容器中一个bean定义只有一个对象实例。默认情况下会在容器启动时初始化beanQ但我们可以指定Bean节点的lazy-init=“true”来gq初始化beanQ这时候,只有W一ơ获取bean会才初始化bean。如Q?br />  <bean id="xxx" class="cn.itcast.OrderServiceBean" lazy-init="true"/>
如果惛_所有bean都应用gq初始化Q可以在根节点beans讄default-lazy-init=“true“Q如下:
<beans default-lazy-init="true“ ...>


.prototype
 每次从容器获取bean都是新的对象?br />  
.request
.session
.global session

 

ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
  PersionSevice ps=(PersionSevice)ctx.getBean("persionServiceBean");
  PersionSevice ps2=(PersionSevice)ctx.getBean("persionServiceBean");
  System.out.println(ps==ps2);

 输出:true

可见spring容器默认的bean的生方式是单例

 

?/span>

 <bean id="persionServiceBean" class="cn.com.xinli.service.impl.PersionServiceBean" scope="prototype"></bean> 

 

q时候输出:false ,昄ps与ps2׃一栗?br />



]]>
W四 Spring 的三U实例化bean方式http://www.aygfsteel.com/phoebird/archive/2009/08/25/292496.htmlW口常开、胦源滚滚来Q?/dc:creator>W口常开、胦源滚滚来Q?/author>Tue, 25 Aug 2009 03:59:00 GMThttp://www.aygfsteel.com/phoebird/archive/2009/08/25/292496.htmlhttp://www.aygfsteel.com/phoebird/comments/292496.htmlhttp://www.aygfsteel.com/phoebird/archive/2009/08/25/292496.html#Feedback0http://www.aygfsteel.com/phoebird/comments/commentRss/292496.htmlhttp://www.aygfsteel.com/phoebird/services/trackbacks/292496.html三种实例化bean的方?/span>

 

1.使用cL造器实例?/span>
<bean id=“orderService" class="cn.itcast.OrderServiceBean"/>

 

 


2.使用静态工厂方法实例化
<bean id="persionServiceBean2" class="cn.com.xinli.service.impl.PersionServiceBeanFactory" factory-method="createPersionServiceBean"/>

 

public class PersionServiceBeanFactory
{
 public static PersionServiceBean createPersionServiceBean()
 {
  return new PersionServiceBean();
 }
}

 

例子:

 

(1).首先写工厂类.他其中包含生我们的业务bean的方?/span>

Java代码 复制代码
  1. package cn.com.xinli.service.impl;   
  2.   
  3.   
  4. public class PersionServiceBeanFactory   
  5. {   
  6.     public static PersionServiceBean createPersionServiceBean()   
  7.     {   
  8.         return new PersionServiceBean();   
  9.     }   
  10. }  

 

(2).改写beans.xml :包含工厂cȝ名和产生业务bean的方法名?/span>

 

 <bean id="persionServiceBean2" class="cn.com.xinli.service.impl.PersionServiceBeanFactory" factory-method="createPersionServiceBean"/>

 

 (3) 试

 

Java代码 复制代码
  1. ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");   
  2.         PersionSevice ps=(PersionSevice)ctx.getBean("persionServiceBean2");   
  3.                                                         
  4.         ps.save();  

 (4) l果

 

2009-05-24 14:34:00,781  INFO (PersionServiceBean.java:12) - 我是save()Ҏ!

 


3.使用实例工厂Ҏ实例?

 

<bean id="PersionServiceBeanFactory" class="cn.com.xinli.service.impl.PersionServiceBeanFactory"></bean>
    <bean id="persionServiceBean3" factory-bean="PersionServiceBeanFactory" factory-method="createPersionServiceBean2"></bean>

 

public  PersionServiceBean createPersionServiceBean2()
 {
  return new PersionServiceBean();
 }

 

例子:

 

(1). 首先写工厂类.他其中包含生我们的业务bean的方?nbsp;,在已有代码的基础?/span>

Java代码 复制代码
  1. package cn.com.xinli.service.impl;   
  2.   
  3.   
  4. public class PersionServiceBeanFactory   
  5. {   
  6.     public static PersionServiceBean createPersionServiceBean()   
  7.     {   
  8.         return new PersionServiceBean();   
  9.     }   
  10.        
  11.     <SPAN style="COLOR: #ff0000">public  PersionServiceBean createPersionServiceBean2()   
  12.     {   
  13.         return new PersionServiceBean();   
  14.     }</SPAN>   
  15.        
  16. }  

 

 

(2).改写beans.xml :写两个bean,一个是工厂bean,一个是利用工厂bean产生业务bean的bean.

 

Xml代码 复制代码
  1. <bean id="PersionServiceBeanFactory" class="cn.com.xinli.service.impl.PersionServiceBeanFactory"></bean>  
  2.     <bean id="persionServiceBean3" factory-bean="PersionServiceBeanFactory" factory-method="createPersionServiceBean2"></bean>  

 

 (3) 试

 

Java代码 复制代码
  1. ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");   
  2.         PersionSevice ps=(PersionSevice)ctx.getBean("persionServiceBean3");   
  3.                                                         
  4.         ps.save();  

 (4) l果

 

2009-05-24 14:49:17,812  INFO (PersionServiceBean.java:12) - 我是save()Ҏ!

 

 (5) 注意,其实方式2和方?的区别就?工厂cM是如何生业务bean?方式2?span style="color: #ff0000">static方式,方式3不是



]]>
վ֩ģ壺 | ư| ͭ| | | | | ӥ̶| ߶| | | | մ| | ǿ| | Ϫ| Ϫ| | | пǰ| ԣ| ƽ˳| | ͨ| | Ȫ| | | μԴ| | ʯ¥| Դ| ֦| ͼ| ƽ| ͸| | ƽң| ̷| °Ͷ|