Java/Spring/IoC Injection

Материал из Java эксперт
Перейти к: навигация, поиск

Dependant Check

   <source lang="java">

/* Pro Spring By Rob Harrop Jan Machacek ISBN: 1-59059-461-4 Publisher: Apress

  • /

/////////////////////////////////////////////////////////////////////////////////////// //File: depcheck.xml <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans>

   <bean id="simpleBean1" class="SimpleBean" dependency-check="simple">
       <property name="someInt">
           <value>16</value>
       </property>
   </bean>  
   
   <bean id="simpleBean2" class="SimpleBean" dependency-check="objects">
       <property name="nestedSimpleBean">
           <ref local="nestedSimpleBean"/>
       </property>
   </bean>  
   
   <bean id="simpleBean3" class="SimpleBean" dependency-check="all">
       <property name="someInt">
           <value>16</value>
       </property>
   </bean>    
   
   <bean id="nestedSimpleBean" class="SimpleBean"/>

</beans> /////////////////////////////////////////////////////////////////////////////////////// import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.FileSystemResource; public class SimpleBean {

   private int someInt;
   private SimpleBean nestedSimpleBean;
   public void setSomeInt(int someInt) {
       this.someInt = someInt;
   }
   public void setNestedSimpleBean(SimpleBean nestedSimpleBean) {
       this.nestedSimpleBean = nestedSimpleBean;
   }
   public static void main(String[] args) {
       BeanFactory factory = new XmlBeanFactory(new FileSystemResource(
               "build/depcheck.xml"));
       
       SimpleBean simpleBean1 = (SimpleBean)factory.getBean("simpleBean1");
       SimpleBean simpleBean2 = (SimpleBean)factory.getBean("simpleBean2");
       SimpleBean simpleBean3 = (SimpleBean)factory.getBean("simpleBean3");
   }

}

      </source>
   
  
 
  



Hello World Xml With DI

   <source lang="java">

/* Pro Spring By Rob Harrop Jan Machacek ISBN: 1-59059-461-4 Publisher: Apress

  • /

//File: beans.xml

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans>

   <bean id="provider" class="HelloWorldModel">
       <constructor-arg>
           <value>This is a configurable message</value>
       </constructor-arg>
   </bean>
   <bean id="renderer" class="StandardOutView">
       <property name="model">
           <ref local="provider"/>
       </property>
   </bean>

</beans> /////////////////////////////////////////////////////////////////////////////////////// public interface Model {

 public String getMessage();

}

/////////////////////////////////////////////////////////////////////////////////////// public interface View {

   public void render();
   
   public void setModel(Model m);
   public Model getModel();

}

/////////////////////////////////////////////////////////////////////////////////////// public class StandardOutView implements View {

   private Model model = null;
   public void render() {
       if (model == null) {
           throw new RuntimeException(
                   "You must set the property model of class:"
                           + StandardOutView.class.getName());
       }
       System.out.println(model.getMessage());
   }
   public void setModel(Model m) {
       this.model = m;
   }
   public Model getModel() {
       return this.model;
   }

} ///////////////////////////////////////////////////////////////////////////////////////

public class HelloWorldModel implements Model {

   String mess;
   
   public HelloWorldModel(String m){
       mess = m;
   }
   
   public String getMessage() {
       return mess;
   }

} /////////////////////////////////////////////////////////////////////////////////////// import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.FileSystemResource; public class HelloWorldXmlWithDI {

   public static void main(String[] args) throws Exception {
       // get the bean factory
       BeanFactory factory = getBeanFactory();
       View mr = (View) factory.getBean("renderer");
       mr.render();
   }
   private static BeanFactory getBeanFactory() throws Exception {
       // get the bean factory
       BeanFactory factory = new XmlBeanFactory(new FileSystemResource(
               "build/beans.xml"));
       return factory;
   }

}

      </source>
   
  
 
  



Lookup Performance

   <source lang="java">

/* Pro Spring By Rob Harrop Jan Machacek ISBN: 1-59059-461-4 Publisher: Apress

  • /

/////////////////////////////////////////////////////////////////////////////////////// //File: lookup.xml <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans>

   <bean id="helper" class="MyHelper" singleton="false"/>
   <bean id="abstractLookupBean" class="AbstractLookupDemoBean">
       <lookup-method name="getMyHelper" bean="helper"/>
   </bean>
   <bean id="standardLookupBean" class="StandardLookupDemoBean">
       <property name="myHelper">
           <ref local="helper"/>
       </property>
   </bean>
   <bean id="factoryLookupBean" class="BeanFactoryAwareLookupDemoBean"/>

</beans>

/////////////////////////////////////////////////////////////////////////////////////// public interface DemoBean {

   public MyHelper getMyHelper();
   public void someOperation();

}

/////////////////////////////////////////////////////////////////////////////////////// public class MyHelper {

   public void doSomethingHelpful() {
       // do something!
   }

} /////////////////////////////////////////////////////////////////////////////////////// public class StandardLookupDemoBean implements DemoBean {

   private MyHelper helper;
   
   public void setMyHelper(MyHelper helper) {
       this.helper = helper;
   }
   
   public MyHelper getMyHelper() {
       return this.helper;
   }
   
   public void someOperation() {
       helper.doSomethingHelpful();
   }

} /////////////////////////////////////////////////////////////////////////////////////// public abstract class AbstractLookupDemoBean implements DemoBean {

   public abstract MyHelper getMyHelper();
   
   public void someOperation() {
       getMyHelper().doSomethingHelpful();
   }

}

/////////////////////////////////////////////////////////////////////////////////////// import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; public class BeanFactoryAwareLookupDemoBean implements BeanFactoryAware,

       DemoBean {
   private BeanFactory factory = null;
   public void setBeanFactory(BeanFactory factory) throws BeansException {
       this.factory = factory;
   }
   public MyHelper getMyHelper() {
       return (MyHelper) factory.getBean("helper");
   }
   public void someOperation() {
       getMyHelper().doSomethingHelpful();
   }

} /////////////////////////////////////////////////////////////////////////////////////// import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.FileSystemResource; import org.springframework.util.StopWatch; public class LookupPerformance {

   public static void main(String[] args) {
       BeanFactory factory = new XmlBeanFactory(new FileSystemResource(
               "build/lookup.xml"));
       DemoBean abstractBean = (DemoBean) factory.getBean("abstractLookupBean");
       DemoBean factoryBean = (DemoBean) factory.getBean("factoryLookupBean");
       testPerf(abstractBean);
       testPerf(factoryBean);
   }
   public static void testPerf(DemoBean bean) {
       StopWatch stopWatch = new StopWatch();
       stopWatch.start("perfTest");
       for (int x = 0; x < 1000000; x++) {
           MyHelper helper = bean.getMyHelper();
           helper.doSomethingHelpful();
       }
       stopWatch.stop();
       System.out.println("1000000 gets took "
               + stopWatch.getTotalTimeSeconds() + " seconds");
   }

}

      </source>
   
  
 
  



Model View Injection in Spring

   <source lang="java">

/* Pro Spring By Rob Harrop Jan Machacek ISBN: 1-59059-461-4 Publisher: Apress

  • /

/////////////////////////////////////////////////////////////////////////////////////// //File: beans.xml <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans>

   <bean id="provider" class="HelloWorldModel">
       <constructor-arg>
           <value>This is a configurable message</value>
       </constructor-arg>
   </bean>
   <bean id="renderer" class="StandardOutView">
       <property name="model">
           <ref local="provider"/>
       </property>
   </bean>

</beans> /////////////////////////////////////////////////////////////////////////////////////// public interface View {

   public void render();
   
   public void setModel(Model m);
   public Model getModel();

}

///////////////////////////////////////////////////////////////////////////////////////

public interface Model {

 public String getMessage();

} /////////////////////////////////////////////////////////////////////////////////////// public class StandardOutView implements View {

   private Model model = null;
   public void render() {
       if (model == null) {
           throw new RuntimeException(
                   "You must set the property model of class:"
                           + StandardOutView.class.getName());
       }
       System.out.println(model.getMessage());
   }
   public void setModel(Model m) {
       this.model = m;
   }
   public Model getModel() {
       return this.model;
   }

} /////////////////////////////////////////////////////////////////////////////////////// public class HelloWorldModel implements Model {

   String mess;
   
   public HelloWorldModel(String m){
       mess = m;
   }
   
   public String getMessage() {
       return mess;
   }

} /////////////////////////////////////////////////////////////////////////////////////// import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.FileSystemResource; public class HelloWorldXml {

   public static void main(String[] args) throws Exception {
       // get the bean factory
       BeanFactory factory = getBeanFactory();
       View mr = (View) factory.getBean("renderer");
       Model mp = (Model) factory.getBean("provider");
       mr.setModel(mp);
       mr.render();
   }
   private static BeanFactory getBeanFactory() throws Exception {
       // get the bean factory
       BeanFactory factory = new XmlBeanFactory(new FileSystemResource(
               "build/beans.xml"));
       return factory;
   }

}

      </source>
   
  
 
  



Simple Inject By ID

   <source lang="java">

/* Pro Spring By Rob Harrop Jan Machacek ISBN: 1-59059-461-4 Publisher: Apress

  • /

///////////////////////////////////////////////////////////////////////////////////////

//File: beans.xml <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans>

   <bean id="injectSimple" class="InjectSimple">
       <property name="name">
           <value>John Smith</value>
       </property>
       <property name="age">
           <value>35</value>
       </property>
       <property name="height">
           <value>1.78</value>
       </property>
       <property name="isProgrammer">
           <value>true</value>
       </property>
       <property name="ageInSeconds">
           <value>1103760000</value>
       </property>
   </bean>
   
   
   <bean id="oracle" name="wiseworm" class="BookwormOracle"/>
   
   
   <bean id="injectRef" class="InjectRef">
       <property name="oracle">
           <ref local="oracle"/>
       </property>
   </bean>
   
   

</beans>

/////////////////////////////////////////////////////////////////////////////////////// public interface Oracle {

   public String defineMeaningOfLife();

}

/////////////////////////////////////////////////////////////////////////////////////// public class InjectRef {

   private Oracle oracle;
   
   public void setOracle(Oracle oracle) {
       this.oracle = oracle;
       System.out.println(oracle.defineMeaningOfLife());
   }

}

/////////////////////////////////////////////////////////////////////////////////////// public class BookwormOracle implements Oracle {

   private Encyclopedia enc;
   public void setEncyclopedia(Encyclopedia enc) {
       this.enc = enc;
   }
   public String defineMeaningOfLife() {
       return "Encyclopedia"s are a waste of money - use the Internet";
   }

} /////////////////////////////////////////////////////////////////////////////////////// public class Encyclopedia { }

/////////////////////////////////////////////////////////////////////////////////////// import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.FileSystemResource; public class InjectSimple {

   private String name;
   private int age;
   private float height;
   private boolean isProgrammer;
   private Long ageInSeconds;
   public static void main(String[] args) {
       BeanFactory factory = new XmlBeanFactory(new FileSystemResource(
               "build/beans.xml"));
       InjectSimple simple = (InjectSimple)factory.getBean("injectSimple");
       factory.getBean("injectRef");
       System.out.println(simple);
   }
   public void setAgeInSeconds(Long ageInSeconds) {
       this.ageInSeconds = ageInSeconds;
   }
   public void setIsProgrammer(boolean isProgrammer) {
       this.isProgrammer = isProgrammer;
   }
   public void setAge(int age) {
       this.age = age;
   }
   public void setHeight(float height) {
       this.height = height;
   }
   public void setName(String name) {
       this.name = name;
   }
   public String toString() {
       return    "Name :" + name + "\n"
               + "Age:" + age + "\n"
               + "Age in Seconds: " + ageInSeconds + "\n"
               + "Height: " + height + "\n"
               + "Is Programmer?: " + isProgrammer;
   }

}

      </source>
   
  
 
  



Simple Inject By Name

   <source lang="java">

/* Pro Spring By Rob Harrop Jan Machacek ISBN: 1-59059-461-4 Publisher: Apress

  • /

/////////////////////////////////////////////////////////////////////////////////////// //File: beans.xml <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans>

   <bean id="injectSimple" class="InjectSimple">
       <property name="name">
           <value>John Smith</value>
       </property>
       <property name="age">
           <value>35</value>
       </property>
       <property name="height">
           <value>1.78</value>
       </property>
       <property name="isProgrammer">
           <value>true</value>
       </property>
       <property name="ageInSeconds">
           <value>1103760000</value>
       </property>
   </bean>
   
   
   <bean id="oracle" name="wiseworm" class="BookwormOracle"/>
   
   
   
   <bean id="injectRef" class="InjectRef">
       <property name="oracle">
           <ref bean="wiseworm"/>
       </property>
   </bean>

</beans>

/////////////////////////////////////////////////////////////////////////////////////// public interface Oracle {

   public String defineMeaningOfLife();

}

///////////////////////////////////////////////////////////////////////////////////////

public class BookwormOracle implements Oracle {

   private Encyclopedia enc;
   public void setEncyclopedia(Encyclopedia enc) {
       this.enc = enc;
   }
   public String defineMeaningOfLife() {
       return "Encyclopedia"s are a waste of money - use the Internet";
   }

}

/////////////////////////////////////////////////////////////////////////////////////// public class Encyclopedia { }

///////////////////////////////////////////////////////////////////////////////////////

public class InjectRef {

   private Oracle oracle;
   
   public void setOracle(Oracle oracle) {
       this.oracle = oracle;
       System.out.println(oracle.defineMeaningOfLife());
   }

} /////////////////////////////////////////////////////////////////////////////////////// import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.FileSystemResource; public class InjectSimple {

   private String name;
   private int age;
   private float height;
   private boolean isProgrammer;
   private Long ageInSeconds;
   public static void main(String[] args) {
       BeanFactory factory = new XmlBeanFactory(new FileSystemResource(
               "build/beans.xml"));
       InjectSimple simple = (InjectSimple)factory.getBean("injectSimple");
       factory.getBean("injectRef");
       System.out.println(simple);
   }
   public void setAgeInSeconds(Long ageInSeconds) {
       this.ageInSeconds = ageInSeconds;
   }
   public void setIsProgrammer(boolean isProgrammer) {
       this.isProgrammer = isProgrammer;
   }
   public void setAge(int age) {
       this.age = age;
   }
   public void setHeight(float height) {
       this.height = height;
   }
   public void setName(String name) {
       this.name = name;
   }
   public String toString() {
       return    "Name :" + name + "\n"
               + "Age:" + age + "\n"
               + "Age in Seconds: " + ageInSeconds + "\n"
               + "Height: " + height + "\n"
               + "Is Programmer?: " + isProgrammer;
   }

}

      </source>