Spring 3のIOCのannotation学習ノート

7263 ワード

以下に小さなSpring 3のannotationの応用ノートを記録します.
ファイルリスト:
UserService-interface
UserDao-interface
UserServiceImpl-UserServiceインタフェースの実装
UserDaoImpl-UserDaoインタフェースの実装
User-エンティティークラス
package com.niewj.model;

public class User {

	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}

 
package com.niewj.service;

import javax.annotation.Resource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;

import com.niewj.dao.LogDao;
import com.niewj.dao.UserDao;
import com.niewj.model.User;


@Service("userServiceImplementation")
// @Component/@Repository/@Controller/@Service
@Scope("singleton")
// @Scope("prototype")
public class UserServiceImpl implements UserService {

//   , setter 。
/*    @Autowired
    @Qualifier("userDaoImplementation")*/
    //@Resource(name="userDaoImplementation")//  , setter , , byType 。
    private UserDao uuuserDao;

    
    private LogDao logDao;

    public UserDao getUuuserDao() {
        return uuuserDao;
    }

    /*
    @Autowired// (required=false)
    @Qualifier("userDaoImplementation")// id/name
     */
    @Resource(name="userDaoImplementation")
    public void setUuuserDao(UserDao uuuserDao) {
        this.uuuserDao = uuuserDao;
    }

    public LogDao getLogDao() {
        return logDao;
    }

    @Autowired
    public void setLogDao(LogDao logDao) {
        this.logDao = logDao;
    }

    @Override
    public boolean regist(User user) {
        logDao.log();
        return uuuserDao.save(user);
    }
}


 
package com.niewj.dao;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

import org.springframework.stereotype.Repository;

import com.niewj.model.User;

/* @Repository/@Controller/@Service @Component, 、 、 Dao  */

@Repository("userDaoImplementation")
public class UserDaoImpl implements UserDao {

    @PostConstruct//  <bean init-method="init">
    public void init(){
        System.err.println(" DAO , 。");
    }

    @PreDestroy// <bean destroy-method="destroy">
    public void destroy(){
        System.err.println(" DAO , 。");
    }
    
    @Override
    public boolean save(User user) {
        System.err.println(" :" +user.getName());
        return true;
    }
}



 
package com.niewj.dao;

import org.springframework.stereotype.Repository;

@Repository("logDao")
public class LogDaoImpl implements LogDao {

	@Override
	public void log() {
		System.out.println("Logging...... ............OK");
	}
}

 
package com.niewj;

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

import com.niewj.model.User;
import com.niewj.service.UserService;
import com.niewj.service.UserServiceImpl;

public class AnnotationTest {
    @Test
    public void testIocAnnotation() {
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService loginService = ac.getBean("userServiceImplementation", UserServiceImpl.class);
        
        User user = new User();
        user.setName("dotjar");
        loginService.regist(user);
    }
}


 
<?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: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/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

	<import resource="beans.xml" />

</beans>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:tx="http://www.springframework.org/schema/tx"
    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/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-3.2.xsd">

    
    <!--  Annotation   context:component-scan -->
    <!-- <context:annotation-config /> -->
    
    <context:component-scan base-package="com.niewj">
    </context:component-scan>
</beans>

1.UserServiceImplの@Serviceの文字列はgetBeanの文字列と一致する必要があります.
2.UserDaoImplの@Repositoryのパラメータと、UserServiceImplのSetterメソッドの@Autowired@Qualifier(「daoパラメータ」)一致
3.構成ファイルで注記のサポートを開始するには:
    *1.コンフィギュレーションファイルでcontextネーミングスペースを開くサポート:タグに追加:<1>追加【xmlns】:【xmlns:context=”http://www.springframework.org/schema/context""<<2>加入【xsi:schemaLocation】:【http://www.springframework.org/schema/context        http://www.springframework.org/schema/context/spring-context-3.2.xsd】        *2.プロファイルで注釈サポートを開く:
    *3.があるので、は省くことができます.
 
まとめ:
1.
 @Repository/@Controller/@Service @Component, 、 、 Dao 

2.
@Resource(name="userDaoImplementation")//  name , setter , byName , byType 。

3.
 @Autowired // byType 
 @Qualifier("userDaoImplementation") //byName, @Autowired 。