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基于注解開發比較簡便,注解開發也是趨勢。