Spring 註解開發
介紹
Spring2.5之前Spring只提供xml配置開發,Spring2.5之後提供註解開發Spring.
基於XML配置開發和基於註解開發各自都有優點,就目前趨勢和開發效率而言,強烈推薦使用註解開發。
Spring註解應用
標識JavaBean爲Spring IOC容器管理對象的四個註解
1.@Component:基本註解
2.@Respository:標識持久層組件
3.@Service:標識服務層(業務層)組件
4.@Controller:標識控制器組件(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基於註解開發比較簡便,註解開發也是趨勢。