天天看點

Spring 注解開發Spring 注解開發

Spring 注解開發

介紹

Spring2.5之前Spring隻提供xml配置開發,Spring2.5之後提供注解開發Spring.
基于XML配置開發和基于注解開發各自都有優點,就目前趨勢和開發效率而言,強烈推薦使用注解開發。
           

Spring注解應用

辨別JavaBean為Spring IOC容器管理對象的四個注解

[email protected]:基本注解
[email protected]:辨別持久層元件
[email protected]:辨別服務層(業務層)元件
[email protected]:辨別控制器元件(Struts2.x裡的Action或Spring MVC的Controller)
           
備注:以上四種元件其實并沒有差別,隻不過是名稱不同更好的細分.

備注:對于掃描到的元件,Spring有預設的命名政策:将類名第一個字母小寫.也可以在注解中通過value屬性值辨別元件的名稱.

<!-- 自動掃描配置 -->
<context:component-scan base-package="com.xxx"/>
           

元件裝配(自動裝配)

1、@Autowired(Spring提供支援)
2、@Resource(Java自帶支援)
3、@Inject(Java自帶支援)


日常開發中使用Autowired也可以,但是遇到元件名有沖突時那麼需要借助Qualifier注解來過濾。

遇到元件沖突情況時,也可以使用Resource注解,Resource注解可以配置name過濾。
           

舉例

UserDao接口

    UserDaoJdbcImpl實作
    UserDaoJpaImp實作
當UserDao接口有多種實作時,如果隻使用Spring的預設自動裝配那麼就會出現沖突了。
           
public interface UserDao
{
    void addUser();
}
           
@Repository(value = "userDaoJdbc")
public class UserDaoJdbcImpl implements UserDao
{
    @Override
    public void addUser()
    {
        System.out.println("jdbc addUser...");
    }
}
           
@Repository(value = "userDaoJpa")
public class UserDaoJpaImpl implements UserDao
{
    @Override
    public void addUser()
    {
        System.out.println("jpa addUser...");
    }
}
           
@Service(value="userService")
public class UserService
{

    //方式1
    //  @Autowired
    //  @Qualifier(value="userDaoJdbc")

    //方式2
    //  @Resource(name="userDaoJpa")

    @Resource(name="userDaoJpa")
    private UserDao userDao;

    public void addUser()
    {
        userDao.addUser();
    }
}
           
備注:如果僅僅使用Autowired,那麼上述情況Spring加載時就無法确定到底初始化那個對象了,是以會報錯。
           

Spring其它常用注解

@Scope
@Value
@Qualifier
@Lazy
@AliasFor
@Order
@Primary
@Required
@PostConstruct
@PreDestory

@Bean
@Configuration
@ComponentScan
@ComponentScans
           

總結

Spring基于注解開發比較簡便,注解開發也是趨勢。