Spring ioc注釈入門


スプリングフレームワークは現在盛んに使われています
beanを管理する機能は多くのユーザーの用途が最も広い機能であるに違いない.
注入に依存する用途も非常に広い.
どのバージョンから注釈機能が開発を簡単にしたのか分かりませんが、簡潔です.
この例では,bean管理と依存注入を注釈で実現する.
 
小米2携帯電話がもうすぐ発売されるので、誰もが望んでいるが、この例はこれをシナリオとしている.
 
1.携帯電話のインタフェース---言うまでもなく、結合性を減らすために
 
package com.ioc.inerface;

public interface ITelphone {
	public void call();
}

 
 2.小米実現
 
package com.ioc.impl;

import org.springframework.stereotype.Component;

import com.ioc.inerface.ITelphone;


@Component("telphone")
public class TelphoneImpl implements ITelphone{
	public String toString(){
		return "    (  2)";
	}

	@Override
	public void call() {
		System.out.println("bing~~~ ,  1,   2");
	}
}

 
 3.携帯電話機が開発され、電話帳が必要で、一応単独クラス(携帯電話のコンポーネントではない)と考えられているが、電話帳は、インタフェースを必要とせず、結合度は考慮する必要はない
 
package com.ioc.impl;

import java.util.HashMap;
import java.util.Map;

import org.springframework.stereotype.Component;

@Component("addressBook")
public class AddressBook {
	private Map mapBook = null;
	private void init(){
		mapBook = new HashMap();
		mapBook.put("  1", "0001");
	}
	public String getNum(String name){
		if(mapBook == null){
			init();
		}
		return (String) mapBook.get(name);
	}
}
 
 
4.ok、携帯電話が開発され、電話帳も開発され、人間が登場した.
 
package com.ioc.inerface;

public interface IPerson {
	public void call();
}
 
 
5.人類の実現:
 
package com.ioc.impl;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.ioc.inerface.IPerson;
import com.ioc.inerface.ITelphone;
import com.ioc.util.BeanFactory;

@Component("person")
public class PersonImpl implements IPerson{
	@Autowired
	private AddressBook addressBook;
	public String toString(){
		return "i am a human";
	}

	@Override
	public void call() {
		ITelphone telPhone = (ITelphone) BeanFactory.getBean("telphone");
		String xm1Num = addressBook.getNum("  1");
		System.out.println("---     ,    :"+xm1Num);
		telPhone.call();
		System.out.println("---     ");
	}
}

 
 6.しかしspring管理容器はまだできていないので、使うときに再構築するのか、それは遅くない.
 
package com.ioc.util;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class BeanFactory {
	private static ClassPathXmlApplicationContext ctx ;
	static{
		ctx = new ClassPathXmlApplicationContext("bean.xml");
	}
	public static  Object getBean(String beanName){
		return ctx.getBean(beanName);
	}
	public static void closeBeanFactory(){
		ctx.destroy();
	}
	
}

 
 7.ええ、プロファイルはまだ追加されていません
 
 
<?xml version="1.0" encoding="UTF-8" ?>
<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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
 http://www.springframework.org/schema/context 
 http://www.springframework.org/schema/context/spring-context-2.5.xsd">
 	<!--   com.ioc     ,   spring     -->
    <context:component-scan base-package="com.ioc"/>
</beans>

 
 8.ok、テストしましょう
 
package com.ioc.test;

import com.ioc.inerface.IPerson;
import com.ioc.util.BeanFactory;

public class SpringIocTest {

	public static void main(String[] args) {
		IPerson perSon = (IPerson) BeanFactory.getBean("person");
		perSon.call();
		BeanFactory.closeBeanFactory();
	}

}

 
 実行結果:
 
---電話開始、電話番号:0001
bing~~~もしもし、小米1、私は米2です.
---電話で終わる
 
 
実は大多数の運用の中で、これらの知識は十分で、簡潔で、使いやすくて、もっと詳しい知識については、もっと勉強する必要があります.コメントを歓迎します.
 
添付:
 
----------------------------------------------
必要なjar
1.aspectjrt.jar
2.aspectjweaver.jar
3.cglib-nodep-2.1_3.jar
4.common-annotations.jar
5.commons-logging.jar
6.log4j-1.2.15.jar
7.spring.jar
-----------------------------------------------