註解是代碼中特殊的標記,使用註解可以完成特定的功能。註解可以使用在類、方法或屬性上,寫法如:@註解名稱(屬性名稱=屬性值)
。
注:官方推薦使用註解
使用步驟
一、準備工作
1、導入jar包
- 導入基本的jar包:
commons-logging
、log4j
、spring-beans
、spring-context
、spring-core
、spring-expression
相關jar包。 - 導入AOP的jar包:
spring-aop
jar包。
2、創建類、方法
//例如User.java
package com.myw;
import org.springframework.stereotype.Component;
public class User {
public void add() {
System.out.println("User Add Method.");
}
}
3、創建Spring配置文件,引入約束;並開啓註解掃描
<!--applicationContext.xml-->
<?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.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--
開啓註解掃描
(1)到包中掃描類、方法、屬性上是否有註解
-->
<context:component-scan base-package="com.myw"></context:component-scan>
<!--
(2)只掃描屬性上的註解
-->
<!--<context:annotation-config></context:annotation-config>-->
</beans>
二、註解創建對象
在創建對象的類上面使用註解實現,如:
@Component(value="user")
public class User {
...
}
注: value一般可以省略,直接寫成@Component(“user”)
創建測試類 TestAnno.java和測試方法,如:
package com.myw;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestAnno {
@Test
public void runUser() {
ApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
User user = (User) context.getBean("user");
user.add();
}
}
除了上述提到的 @Component
註解外,Spring中還提供了@Component
的3個衍生註解,其功能就目前來說是一致的,均是爲了創建對象。
- @Controller :WEB層
- @Service :業務層
- @Repository :持久層(不常用,一般使用
@Component
)
以單例或多實例方式創建對象,默認爲單例,多例對象設置註解如下:
@Component(value="user")
@Scope(value="prototype")
public class User {
...
}
三、註解注入屬性
案例:創建Service類和Dao類,並在Service中注入Dao對象。如下:
(1)創建Dao和Service對象
//UserDao.java
package com.myw;
import org.springframework.stereotype.Repository;
@Repository(value="userDao")
public class UserDao {
public void add() {
System.out.println("UserDao Add Method.");
}
}
//UserService.java
package com.myw;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service(value="userService")
public class UserService {
public void add() {
System.out.println("UserService Add Method.");
userDao.add();
}
}
(2)在Service類中定義UserDao類型的屬性,並使用註解完成對象的注入
@Autowired
:自動注入或自動裝配,是根據類名去找到類對應的對象來完成注入的。
@Autowired
private UserDao userDao;
或者 @Resource
@Resource(name="userDao")
private UserDao userDao;
注:
- 其中該註解的name屬性值爲註解創建Dao對象的value屬性的值。這兩種註解方式都不一定要爲需要注入的屬性定義set方法
- @Autowired註解默認是按類型進行裝配的,如果我們想使用名稱裝配可以結合@Qualifier註解進行使用。而@Resource,默認按照名稱進行裝配,如果名稱找不到,則使用類型裝配
總結:
配置文件和註解混合使用
1)創建對象的操作一般使用配置文件方式實現;
2)注入屬性的操作一般使用註解方式實現。