Java Tutorial/Spring/XML Bean

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

After Returning Advice Demo

File: Main.java



   <source lang="java">

import org.springframework.aop.Advisor; import org.springframework.aop.aspectj.AspectJExpressionPointcut; import org.springframework.aop.framework.ProxyFactory; import org.springframework.aop.support.DefaultPointcutAdvisor; import bean.MyClass; import bean.SimpleAfterAdvice; public class Main {

 public static void main(String[] args) {
   MyClass target = new MyClass();
   AspectJExpressionPointcut pc = new AspectJExpressionPointcut();
   pc.setExpression("execution(* bean..*.get*(..))");
   Advisor advisor = new DefaultPointcutAdvisor(pc, new SimpleAfterAdvice());
   ProxyFactory pf = new ProxyFactory();
   pf.setTarget(target);
   pf.addAdvisor(advisor);
   MyClass proxy = (MyClass) pf.getProxy();
   System.out.println(proxy.getName());
   proxy.setName("New Name");
   System.out.println(proxy.getHeight());
 }

}</source>





Alias Bean Demo

File: context.xml



   <source lang="java">

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"

      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="
               http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans.xsd">
   <bean id="name1" name="name2,name3,name4" class="java.lang.String"/>
   <alias name="name1" alias="namex1"/>
   <alias name="name1" alias="namex2"/>

</beans></source>





Annotated Autowiring

File: context.xml



   <source lang="java">

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"

      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="
               http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans.xsd">
   <bean id="a" class="A"/>
   <bean id="b" class="B"/>
   <bean id="annotatedTarget" class="AnnotatedClass"/>
   <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>

</beans></source>





Annotation Component

File: context.xml



   <source lang="java">

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"

      xmlns:context="http://www.springframework.org/schema/context"
      xmlns:aop="http://www.springframework.org/schema/aop"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="
               http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans.xsd
               http://www.springframework.org/schema/context
               http://www.springframework.org/schema/context/spring-context.xsd
               http://www.springframework.org/schema/aop
               http://www.springframework.org/schema/aop/spring-aop.xsd">
   <aop:aspectj-autoproxy />
   <context:component-scan base-package="bean">
       <context:include-filter type="annotation" expression="org.aspectj.lang.annotation.Aspect"/>
   </context:component-scan>

</beans></source>





Autowiring

File: context.xml



   <source lang="java">

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"

      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="
               http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans.xsd">
   <bean id="a" class="A"/>
   <bean id="b" class="B"/>
   <bean id="byName" autowire="byName" class="MyClass"/>
   <bean id="byType" autowire="byType" class="MyClass"/>
   <bean id="constructor" autowire="constructor" class="MyClass"/>
   <bean id="autodetect" autowire="autodetect" class="MyClass"/>

</beans></source>





BeanName Aware

File: context.xml



   <source lang="java">

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"

      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="
               http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans.xsd">
   <bean id="logging" class="LoggingBean"/>

</beans></source>





Factory Bean Demo

File: context.xml



   <source lang="java">

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"

      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="
               http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans.xsd">
   <bean id="sha" class="MessageDigestFactoryBean">
       <property name="algorithm" value="SHA1"/>
   </bean>
   <bean id="md5" class="MessageDigestFactoryBean"/>
   

</beans></source>





Factory Object Integration

File: context.xml



   <source lang="java">

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"

   "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

 <bean id="socketFactory" class="javax.net.SocketFactory" factory-method="getDefault">
 </bean>
 <bean id="localhost" 
       factory-bean="socketFactory" factory-method="createSocket">
     <constructor-arg value="localhost"/>
     <constructor-arg value="80"/>
 </bean>
 <bean id="jexp.ru" 
       factory-bean="socketFactory" factory-method="createSocket">
     <constructor-arg value="www.jexp.ru"/>
     <constructor-arg value="80"/>
 </bean>

</beans></source>





Get Method By Name

File: Main.java



   <source lang="java">

import java.lang.reflect.Method; import org.springframework.aop.Advisor; import org.springframework.aop.ClassFilter; import org.springframework.aop.MethodBeforeAdvice; import org.springframework.aop.framework.ProxyFactory; import org.springframework.aop.support.ruposablePointcut; import org.springframework.aop.support.DefaultPointcutAdvisor; import org.springframework.aop.support.StaticMethodMatcher; public class Main {

 public static void main(String[] args) {
   SampleBean target = new SampleBean();
   ComposablePointcut pc = new ComposablePointcut(ClassFilter.TRUE, new GetterMethodMatcher());
   pc.intersection(new GetAgeMethodMatcher());
   SampleBean proxy = getProxy(pc, target);
   testInvoke(proxy);    
 }
 private static SampleBean getProxy(ComposablePointcut pc, SampleBean target) {
   Advisor advisor = new DefaultPointcutAdvisor(pc, new SimpleBeforeAdvice());
   ProxyFactory pf = new ProxyFactory();
   pf.setTarget(target);
   pf.addAdvisor(advisor);
   return (SampleBean) pf.getProxy();
 }
 private static void testInvoke(SampleBean proxy) {
   proxy.getAge();
   proxy.getName();
   proxy.setName("QQQ");
 }

} class GetterMethodMatcher extends StaticMethodMatcher {

 public boolean matches(Method method, Class cls) {
   return (method.getName().startsWith("get"));
 }

}

class GetAgeMethodMatcher extends StaticMethodMatcher {

 public boolean matches(Method method, Class cls) {
   return "getAge".equals(method.getName());
 }

} class SampleBean {

 public String getName() {
   return "AAA";
 }
 public void setName(String name) {
 }
 public int getAge() {
   return 100;
 }

} class SimpleBeforeAdvice implements MethodBeforeAdvice {

 public void before(Method method, Object[] args, Object target) throws Throwable {
   System.out.println("Before method " + method);
 }

}</source>





Inheritance Demo

File: context.xml



   <source lang="java">

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"

      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="
               http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans.xsd">
   <bean id="parent" class="SimpleBean" abstract="true">
       <property name="name" value="Name 1"/>
   </bean>
   <bean id="bean1" class="SimpleBean" parent="parent">
       <property name="age" value="28"/>
   </bean>
   <bean id="bean2" class="SimpleBean" parent="parent"/>

</beans></source>





Local Reference

File: context.xml



   <source lang="java">

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"

"http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

 <bean id="weatherService" class="WeatherServiceImpl">
   <property name="weatherDao">
     <ref local="weatherDao"/>
   </property>
 </bean>
 <bean id="weatherDao" class="StaticDataWeatherDaoImpl">
 </bean>

</beans></source>





Method Loopup

File: context.xml



   <source lang="java">

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"

   "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

 <bean id="dataService" class="DataServiceImpl">
   <lookup-method name="getDataDao" bean="dataDao"/>
 </bean>
 <bean id="dataDao" singleton="false"
       class="StatefulDataDataDaoImpl">
 </bean>

</beans></source>





Required Property Not Set Exception

File: context.xml



   <source lang="java">

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"

   "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

  <bean id="nameClass"
        class="InitializingBeanNameClass"/>

</beans></source>





Spring factory method

File: context.xml



   <source lang="java">

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"

   "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

 <bean id="pattern" class="java.util.regex.Pattern" factory-method="compile">
   <constructor-arg value="abc"/>
 </bean>

</beans></source>





XML Based Bean Configuration

File: Main.java



   <source lang="java">

import java.util.HashMap; import java.util.Map; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.ClassPathResource; public class Main {

 public static void main(String[] a) {
   XmlBeanFactory bf = new XmlBeanFactory(new ClassPathResource("context.xml"));
   Oracle oracle = (Oracle) bf.getBean("oracle");
   System.out.println("Meaning of life is " + oracle.defineMeaningOfLife());
 }

} interface Oracle {

 String defineMeaningOfLife();

} interface Encyclopedia {

 Long findLong(String entry);
 

} class BookwormOracle implements Oracle {

 private Encyclopedia encyclopedia;
 public String defineMeaningOfLife() {
     Long ageOfUniverse = this.encyclopedia.findLong("A");
     Long constantOfLife = this.encyclopedia.findLong("C");
     return String.valueOf(ageOfUniverse / constantOfLife);
 }
 public void setEncyclopedia(Encyclopedia encyclopedia) {
     this.encyclopedia = encyclopedia;
 }

}

class HardcodedEncyclopedia implements Encyclopedia {

 private Map<String, Long> entryValues = new HashMap<String, Long>();
 public HardcodedEncyclopedia() {
     this.entryValues.put("A", 1L);
     this.entryValues.put("C", 3L);
 }
 public Long findLong(String entry) {
     return this.entryValues.get(entry);
 }

}</source>





XML Bean Injection with namespace

File: Main.java



   <source lang="java">

import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.ClassPathResource; public class Main {

 public static void main(String[] args) {
   XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource(
       "context.xml"));
   InjectSimpleDemo simple = (InjectSimpleDemo) factory.getBean("injectSimpleDemo");
   System.out.println(simple);
 }

} class InjectSimpleDemo {

 private String name;
 private int age;
 private float height;
 private boolean isProgrammer;
 private Long ageInSeconds;
 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;
 }
 @Override
 public String toString() {
   return String.format("Name: %s\nAge: %d\nAge in Seconds: %d\nHeight: %g\nIs Programmer?: %b",
       this.name, this.age, this.ageInSeconds, this.height, this.isProgrammer);
 }

}</source>