java 註解總結
@Controller用於標註控制層組件
@Controller 用於標記在一個類上,使用它標記的類就是一個SpringMVC Controller 對象。分發處理器將會掃描使用了該註解的類的方法。通俗來說,被Controller標記的類就是一個控制器,這個類中的方法,就是相應的動作。
@RequestMapping是一個用來處理請求地址映射的註解,可用於類或方法上。用於類上,表示類中的所有響應請求的方法都是以該地址作為父路徑。比如圖一中,跳轉到登錄頁面的路徑就是localhost:8080/xxx-war/user/toLogin
@Controller public class UserController { ... }
@Service用於標註業務層組件
@Service("userService")註解是告訴Spring,當Spring要創建UserServiceImpl的的實例時,bean的名字必須叫做"userService",這樣當Action需要使用UserServiceImpl的的實例時,就可以由Spring創建好的"userService",然後註入給Action。
@Service註解,其實做了兩件事情:
(1)、聲明UserService.java是一個bean,這點很重要,因為UserService.java是一個bean,其他的類才可以使用@Autowired將UserService作為一個成員變量自動註入。
(2)、UserService.java在bean中的id是"userService",即類名且首字母小寫。
Spring默認產生的bean是單例的,假如我不想使用單例怎麽辦,xml文件裏面可以在bean裏面配置scope屬性。註解也是一樣,配置@Scope即可,默認是"singleton"即單例,"prototype"表示原型即每次都會new一個新的出來。
@Service("userService") public class UserServiceImpl implements UserService { ……… }
@Repository用於標註數據訪問組件,即DAO組件
@Repository(value="userDao")註解是告訴Spring,讓Spring創建一個名字叫“userDao”的UserDaoImpl實例。
當Service需要使用Spring創建的名字叫“userDao”的UserDaoImpl實例時,就可以使用@Resource(name = "userDao")註解告訴Spring,Spring把創建好的userDao註入給Service即可。
@Autowired可以對成員變量、方法和構造函數進行標註,來完成自動裝配的工作,我們也要清楚,@Autowired是根據類型進行自動裝配的。
@Repository(value="userDao") public class UserDaoImpl extends BaseDaoImpl<User> { ……… }
@Component泛指組件,當組件不好歸類的時候,我們可以使用這個註解進行標註。
@Component是所有受Spring 管理組件的通用形式,@Component註解可以放在類的頭上,@Component不推薦使用。
@Controller和@RestController的區別?
官方文檔:
@RestController is a stereotype annotation that combines @ResponseBody and @Controller.
意思是:
@RestController註解相當於@ResponseBody + @Controller合在一起的作用。
1)如果只是使用@RestController註解Controller,則Controller中的方法無法返回jsp頁面,配置的視圖解析器InternalResourceViewResolver不起作用,返回的內容就是Return 裏的內容。
例如:本來應該到success.jsp頁面的,則其顯示success.
2)如果需要返回到指定頁面,則需要用 @Controller配合視圖解析器InternalResourceViewResolver才行。
3)如果需要返回JSON,XML或自定義mediaType內容到頁面,則需要在對應的方法上加上@ResponseBody註解。
annotation之@Autowired、@Inject、@Resource三者區別
1、@Autowired是spring自帶的,@Inject是JSR330規範實現的,@Resource是JSR250規範實現的,需要導入不同的包
2、@Autowired、@Inject用法基本一樣,不同的是@Autowired有一個request屬性
3、@Autowired、@Inject是默認按照類型匹配的,@Resource是按照名稱匹配的
4、@Autowired如果需要按照名稱匹配需要和@Qualifier一起使用,@Inject和@Name一起使用
用途:做bean的註入時使用
@Autowired 屬於Spring的註解 org.springframework.beans.factory.annotation.Autowired
@Resource 不屬於Spring的註解,JDK1.6支持的註解 javax.annotation.Resource
其他
@Configuration把一個類作為一個IoC容器,它的某個方法頭上如果註冊了@Bean,就會作為這個Spring容器中的Bean。
@Scope註解 作用域
@Lazy(true) 表示延遲初始化
@Service用於標註業務層組件、
@Controller用於標註控制層組件(如struts中的action)
@Repository用於標註數據訪問組件,即DAO組件。
@Component泛指組件,當組件不好歸類的時候,我們可以使用這個註解進行標註。
@Scope用於指定scope作用域的(用在類上)
@PostConstruct用於指定初始化方法(用在方法上)
@PreDestory用於指定銷毀方法(用在方法上)
@DependsOn:定義Bean初始化及銷毀時的順序
@Primary:自動裝配時當出現多個Bean候選者時,被註解為@Primary的Bean將作為首選者,否則將拋出異常
@Autowired 默認按類型裝配,如果我們想使用按名稱裝配,可以結合@Qualifier註解一起使用。如下:
@Autowired @Qualifier("personDaoBean") 存在多個實例配合使用
@Resource默認按名稱裝配,當找不到與名稱匹配的bean才會按類型裝配。
@PostConstruct 初始化註解
@PreDestroy 摧毀註解 默認 單例 啟動就加載
@Async異步方法調用
java 註解總結