SSM框架註解的總結與詳解
註解含義:
用於建立物件的註解:
相當於:<bean id="" class="">
@Component註解:
作用:
把資源讓spring來管理。相當於在xml中配置一個bean,次註解使用在實體bean的頭部
@Component("accountService")
public class AccountServiceImpl implements AccountService {}
value = "accountService":相當於配置了bean標籤的id屬性,我們也可以不寫value的值預設bean的id是當前類的類名首字母小寫accountServiceImpl,單獨配置value時,可以省略value。
@Controller @Service @Repository:
三個註解都是針對@Component註解的衍生註解,他們的作用及屬性都是一模一樣的。
相當於: <property name="" ref=""> <property name="" value="">
他們只不過是提供了更加明確的語義化。
@Controller:一般用於表現層的註解。
@Service:一般用於業務層的註解。
@Repository:一般用於持久層的註解。
細節:如果註解中有且只有一個屬性要賦值時,且名稱是value,value在賦值時可以不寫。
用於注入資料的:
相當於: <property name="" ref=""> <property name="" value="">
@Autowired:
作用:
自動按照型別注入。當使用註解注入屬性時,set方法可以省略。它只能注入其他bean型別。當有多個型別匹配時,使用要注入的物件的變數名稱作為bean的id,在spring容器查詢,找到了也可以注入成功。找不到就報錯。
示例:
@Autowired
private AccountDao accountDao;
@Qualifier:
作用:
在自動按照型別注入的基礎之上,再按照Bean的id注入。它在給欄位注入時不能獨立使用,必須和@Autowire一起使用,
但是給方法引數注入時,可以獨立使用。
屬性:
value:指定bean的id。
示例:
@Autowired
@Qualifier("accountDao2")指定將accountDao注入實體的變數名
private AccountDao accountDao;
給方法注入實參:
public JdbcTemplate craJdbcTemplate(@Qualifier("dataSource") DataSource dataSource){ }
@Resource:
作用:
直接按照Bean的id注入。它也只能注入bean型別。
屬性:
name:指定bean的id。
示例:
@Resource(name="accountDao")
private AccountDao accountDao;
@Value:
作用:
注入基本資料型別和String型別資料的
屬性:
value:用於指定值
示例1:
@Value("zahngsan")
private String name; name="zahngsan"
示例2:
//將配置檔案jdbc.properties中的資料註解到
@Value("${jdbc.driverClass}")
private String driverClass;driverClass="com.mysql.jdbc.Driver"
用於改變作用範圍的:
相當於:<bean id="" class="" scope="">
@Scope:
作用:
指定bean的作用範圍。
屬性:
value:指定範圍的值。
取值:
singleton:預設的單例
prototype:多例
新註解說明:
@Configuration:
作用:
用於指定當前類是一個spring配置類,當建立容器時會從該類上載入註解。
獲取容器時需要使用AnnotationApplicationContext(有@Configuration註解的類.class)。
示例程式碼:
/**
* spring的配置類,相當於applicationContext.xml檔案
*/
@Configuration
public class SpringConfiguration {
}
@ComponentScan:
作用:
用於指定spring在初始化容器時要掃描的包。作用和在spring的xml配置檔案中的:
<context:component-scan base-package="cn.itcast"></context:component-scan>
屬性:
Value(單獨使用可省略):用於指定要掃描的包。和標籤中的basePackages屬性作用一樣。
示例程式碼:
/**
* spring的配置類,相當於bean.xml檔案
*/
@Configuration
@ComponentScan("cn.itcast")
public class SpringConfiguration {
}
@Bean:
作用:
該註解只能寫在方法上,將方法的返回值作為一個bean,並且放入spring容器。id就是name的屬性的值
屬性:
name:給當前@Bean註解方法建立的物件指定一個名稱(即bean的id)。
示例程式碼:
@Bean(name="dataSource")
public DataSource createDataSource() throws Exception{
ComboPooledDataSource ds = new ComboPooledDataSource();
ds.setDriverClass("com.mysql.jdbc.Driver");
ds.setJdbcUrl("jdbc:mysql://localhost:3306/heima-26");
ds.setUser("root");
ds.setPassword("root");
return ds;
}
@PropertySource:
作用:
用於載入.properties檔案中的配置。例如我們配置資料來源時,可以把連線資料庫的資訊寫到properties配置檔案中,就可以使用此註解指定properties配置檔案的位置。
屬性:
value[]:用於指定properties檔案位置。如果是在類路徑下,需要寫上classpath:
示例程式碼:
@PropertySource(value = { "classpath:jdbc.properties" })
public class JdbcConfig {
@Value("${jdbc.driver}")
private String driverClass;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Bean(name = "dataSource")
public DataSource createDataSource() throws Exception {
ComboPooledDataSource ds = new ComboPooledDataSource();
ds.setDriverClass(driverClass);
ds.setJdbcUrl(url);
ds.setUser(username);
ds.setPassword(password);
return ds;
}
}
@Import:
作用:
用於匯入其他配置類,在引入其他配置類時,其他類上可以不用再寫@Configuration註解。當然,寫上也沒問題。
屬性:
value[]:用於指定其他配置類的位元組碼。
示例程式碼:
@Configuration
@ComponentScan("cn.itcast")
@Import(value = { JdbcConfig.class })
public class SpringConfiguration {
}
@Configuration//寫不寫都行
@PropertySource(value = { "classpath:jdbc.properties" })
public class JdbcConfig {
}
Spring整合junit:
@RunWith:
作用:
替換掉junit的執行器,換成一個可以初始化spring容器的執行器。
屬性:
value:單獨配置時,value屬性名稱可以省略,配置SpringJUnit4ClassRunner.class來代替原來junit的執行器
@ContextConfiguration:
作用:
載入配置類或者xml配置檔案
屬性:
value[]:用來指定xml配置檔案的路徑
class[]: 用來指定配置類
示例:自動的載入配置檔案的資訊
//表示spring整合junit使用spring容器的執行器
@RunWith(SpringJUnit4ClassRunner.class)
//表示載入xml的配置的檔案即可完成配置檔案的載入
@ContextConfiguration(locations={"classpath:applicationContext.xml"})
@EnableAspectJAutoProxy:
宣告使用註解方式的AOP配置了:
@Configuration:
標註此類是一個配置的類相當於applicationContext.xml的載入配置的類:
@ComponentScan("com.itheima"):
標註此類相當於applicationContext.xml的載入配置的類,開啟包的全域性的掃描的方式:
@Configuration//標註此類是一個配置的類
@ComponentScan("com.itheima")//掃描的類
@EnableAspectJAutoProxy//宣告使用註解方式的AOP配置了
public class SpringConfiguration {
}
@Aspect:
指定當前類是通知類寫在類上:
@Aspect//宣告這是一個切面類(通知類)裡面配置的有具體的通知的方法
@Service//將此類放到容器中
public class Logger {
}
@Before:
前置通知方法:
@Before("execution(* com.itheima.serviceImpl.*.*(..))")
public void beforePrintLog() {
System.out.println("前置通知執行了");
}
@after-returning:
後置通知方法:
@AfterReturning("execution(* com.itheima.serviceImpl.*.*(..))")
public void afterReturningPrintLog() {
System.out.println("後置通知執行了");
}
@after-throwing:
異常攔截通知方法:
@AfterThrowing("execution(* com.itheima.serviceImpl.*.*(..))")
public void afterThrowingPrintLog() {
System.out.println("異常通知執行了");
}
@after:
後通知方法:
@AfterReturning("execution(* com.itheima.serviceImpl.*.*(..))")
public void afterReturningPrintLog() {
System.out.println("後置通知執行了");
}
@PointCut:
抽取切點表示式:
@Pointcut("execution(* com.itheima.serviceImpl.*.*(..))")
public void pt1(){
}
@around:
環繞通知方法:
/**
* 環繞通知
* 問題:
* 當配置完環繞通知之後,沒有業務層方法執行(切入點方法執行)
* 分析:
* 通過動態代理的程式碼分析,我們現在的環繞通知沒有明確的切入點方法呼叫
* 解決:
* spring框架為我們提供了一個介面,該介面可以作為環繞通知的方法引數來使用
* ProceedingJoinPoint。當環繞通知執行時,spring框架會為我們注入該介面的實現類。
* 它有一個方法proceed(),就相當於invoke,執行目標方法
* <p>
* spring的環繞通知:
* 它是spring為我們提供的一種可以在程式碼中手動控制增強方法何時執行的方式。
*/
@Around("pt1()")
public Object around(ProceedingJoinPoint pjp) {
try {
System.out.println("增強了前置通知!");
Object obj = pjp.proceed();
System.out.println("增強了後置通知!");
return obj;
} catch (Throwable e) {
System.out.println("增強了異常通知!");
throw new RuntimeException(e);
} finally {
System.out.println("增強了最終通知!");
}
}
基於註解的事務管理:
@Transactional:
@Transactional 註解可以被應用於介面定義和介面方法、類定義和類的 public 方法上。
註解使用在類上表明此類下的所有的方法是一個基於註解的事務
定義在介面上,只有介面的代理的實現的類可認為是基於註解的方法。因為註解不能被繼承。
然而,請注意僅僅 @Transactional 註解的出現不足於開啟事務行為,它僅僅是一種元資料,能夠被可以識別。要開啟註解的植物管理 <tx:annotation-driven/>:
SpringMvc中的註解:
@Controller:
Spring的Controller是Singleton的。這就意味著會被多個請求執行緒共享。因此,我們將控制器設計成無狀態類:
@RequestMapping:
在類前面定義,則將url和類繫結;(如果該類裡只有單個方法的話可以這樣寫,訪問該地址直接呼叫該方法):
示例程式碼如下:
@Controller
@RequestMapping("/getUser")
public class UserController {
......
......
}
定義在方法上則會為方法生成一個請求的路徑:
@RequestMapping("/hello")
public String getHello() {
return "index";
}
可以攜帶請求的引數 Rest風格(佔位符)的對映:
@RequestMapping(value=“/user/{name}/{id} ")
請求URL:http://localhost:8080/user/zhangsan/1001.do
這種方式雖然和萬用字元“*”類似,卻比萬用字元更加強大,佔位符除了可以起到通配的作用,最精要的地方是在於它還可以傳遞引數。
測試一:
@RequestMapping(value="show4/{name}/{id}")
public ModelAndView test4(){
ModelAndView mv = new ModelAndView();
mv.setViewName("hello");
mv.addObject("msg", "佔位符的對映:");
return mv;
}
與其相關:
@GetMapping:相當於@RequestMapping(method = RequestMethod.GET)
@PostMapping:相當於@RequestMapping(method = RequestMethod.POST)
@PutMapping:相當於@RequestMapping(method = RequestMethod.PUT)
@DeleteMapping:相當於@RequestMapping(method = RequestMethod.DELETE)
@PathVariable:
與 Rest風格(佔位符)的對映一起使用獲取引數資料:
@RequestMapping(value="/show4/{name}/{id}")
public ModelAndView test4(@PathVariable("name")String name,@PathVariable("id")Long id){
ModelAndView mv = new ModelAndView();
mv.setViewName("hello");
mv.addObject("msg", "佔位符的對映:"+name+"..."+id);
return mv;
}
@PathVariable(“userId”) Long id, @PathVariable(“name”)String name獲取對應的引數:
@PathVariable(“key”)中的key必須和對應的佔位符中的引數名一致,而方法形參的引數名可任意取:
@RequestParam:
A) 常用來處理簡單型別的繫結,通過Request.getParameter() 獲取的String可直接轉換為簡單型別的情況( String--> 簡單型別的轉換操作由ConversionService配置的轉換器來完成);因為使用request.getParameter()方式獲取引數,所以可以處理get 方式中queryString的值,也可以處理post方式中 body data的值:
B)用來處理Content-Type: 為 application/x-www-form-urlencoded編碼的內容,提交方式GET、POST:
GET模式下,這裡使用了@PathVariable繫結輸入引數,非常適合Restful風格。因為隱藏了引數與路徑的關係,可以提升網站的安全性,靜態化頁面,降低惡意攻擊風險。
POST模式下,使用@RequestBody繫結請求物件,Spring會幫你進行協議轉換,將Json、Xml協議轉換成你需要的物件。
C) 該註解有三個屬性: value、required、defaultValue:
value用來指定要傳入值的id名稱:
required用來指示引數是否必須繫結:
defaultValue用來指定在前端沒有傳值的情況下限定預設的值:
@RequestMapping(value="show19")
public String test19(Model model,@RequestParam(value="name")String name){
model.addAttribute("msg", "使用@RequestParam接收到的引數為:"+name);
return "hello";
}
@ResponseStatus(value=HttpStatus.OK):如果不響應頁面,就需要響應狀態:
@RequestMapping(value = "show23")
@ResponseStatus(value=HttpStatus.OK)//不響應頁面,就需要響應個狀態碼
public void test23(@RequestParam("name")String name,
@RequestParam("age")Integer age,
@RequestParam("isMarry")Boolean isMarry, //可以將on或者1轉換為true,0轉換為false.
@RequestParam("income")Float income,
@RequestParam("interests")String[] interests) {
StringBuffer sb = new StringBuffer();
sb.append("name:"+name+"\n");
sb.append("age:"+age+"\n");
sb.append("isMarry:"+isMarry+"\n");
sb.append("income:"+income+"\n");
sb.append("interests:[");
for (String inter : interests) {
sb.append(inter+" ");
}
sb.append("]");
System.out.println(sb.toString());
}
@CookieValue使用方法同@RequestParam:獲取cookie的值:
@RequestMapping(value = "show22")
public String test22(Model model, @CookieValue("JSESSIONID")String jsessionid) {
model.addAttribute("msg", "jsessionid:" + jsessionid);
return "hello";
}
@ResponseBody:
當一個處理請求的方法標記為@ResponseBody時,表示該方法需要輸出其他檢視(json、xml),springmvc會通過預設的json轉化器轉化輸出,但是需要引入相關的jar包:
<!--jackson支援json解析-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
/**
* 將list集合響應成json資料
* @return
*/
@RequestMapping(value="show28")
@ResponseBody//將資料響應成json格式的資料
public List<User> test28() {
List<User> list = new ArrayList<User>();
for(int i = 0;i< 20;i++) {
User user = new User();
user.setId(i+1L);
user.setUsername("zhangsan"+i);
user.setName("張三"+i);
user.setAge(18);
list.add(user);
}
return list;
}
@RequestBody:接收一個json並且轉換成一個物件
/**
* 將提交的json格式的資料封裝到user物件中
*
* @RequestBody():自動將json資料序列化成一個user物件
* @param model
* @param user
* @return
*/
@RequestMapping(value="show29")
public String test29(Model model,@RequestBody()User user) {
model.addAttribute("msg", user);
return "hello";
}
@RestController:
有時如果在一個Contoller中所有的方法都是用來響應json格式資料的,那麼如果有多個方法,就需要在多個方法上使用@ResponseBody,這樣太麻煩,springmvc提供了一個@RestController,將該註解使用在Controller類上,那麼該controller中的所有方法都預設是響應json格式的資料了:
相關推薦
SSM框架註解的總結與詳解
Spring中的註解: 註解含義: 用於建立物件的註解: 相當於:<bean id="" class=""> @Component註解:
JavaWeb-Spring中註解大全與詳解
可以通過該型別 status 物件顯式結束表單的處理,這相當於觸發 session 清除其中的通過@SessionAttributes 定義的屬性 請求處理方法返回值的可選型別 • void 此時邏輯檢視名由請求處理方法對應的 URL 確定,如以下的方法: @RequestMapping("/welc
Caffe入門例項與詳解 人工智慧框架
Caffe的幾個重要檔案 用了這麼久Caffe都沒好好寫過一篇新手入門的部落格,最近應實驗室小師妹要求,打算寫一篇簡單、快熟入門的科普文。 利用Caffe進行深度神經網路訓練第一步需要搞懂幾個重要檔案: solver.prototxt train_val.proto
超輕量級DI容器框架Google Guice與Spring框架的區別教程詳解及其demo程式碼片段分享
依賴注入,DI(Dependency Injection),它的作用自然不必多說,提及DI容器,例如spring,picoContainer,EJB容器等等,近日,google誕生了更輕巧的DI容器……Guice! 廢話不多講了,先看看Guice是如何實現注入的吧。 定
Nginx簡單使用與詳解
nginx一、定義Nginx是一個反向代理服務器,所謂反向代理服務器就是當客戶端要請求服務器時,在他們之間加一個代理服務器,當客戶端請求時,先請求代理服務器,代理服務器通過防火墻連接到服務器代理服務器介於客戶端與服務器之間,相當於一個中間人或中介人下圖為關系圖:用戶A始終認為它訪問的是原始服務器B而不是代理服
Python爬蟲從入門到放棄(十三)之 Scrapy框架的命令行詳解
directory xpath idf 成了 spider i386 名稱 4.2 不同的 這篇文章主要是對的scrapy命令行使用的一個介紹 創建爬蟲項目 scrapy startproject 項目名例子如下: localhost:spider zhaofan$ sc
用戶和組管理命令介紹與詳解
linux 命令用戶管理命令:useradd,userdel,usermod,passwd,chsh.chfn,finger,id,chageUseradd(建立用戶)useradd [options] USERNAME 例:useradd -g mygroup user2建立一個
springmvc常用註解標簽詳解
單單 tps 完成 移除 找不到 live amp thead man 1、@Controller 在SpringMVC 中,控制器Controller 負責處理由DispatcherServlet 分發的請求,它把用戶請求的數據經過業務處理層處理之後封裝成一個Model
wav文件格式分析與詳解
操作 量化 可用 存在 進制 不同 都是 單純 _for WAV文件是在PC機平臺上很常見的、最經典的多媒體音頻文件,最早於1991年8月出現在Windows 3.1操作系統上,文件擴展名為WAV,是WaveFom的簡寫,也稱為波形文件,可直接存儲聲音波形,還原的波形曲線十
linux下iptables命令的應用與詳解
iptables 一、iptables的規則表和鏈。 表(tables)提供特定的功能,iptables內置了4個表,即filter表、nat表、mangle表和raw表,分別用於實現包過濾,網絡地址轉換、包重構(修改)和數據跟蹤處理。 鏈(chains)是數據包傳播的路徑,每一條鏈其實就是眾多規則中的
[轉]springmvc+mybatis需要的jar包與詳解
bat 簡單的 ive json lan -c 訪問 動態 bject 1、antlr-2.7.6.jar: 項目中沒有添加,hibernate不會執行hql語句 2、Aopalliance.jar: 這個包是AOP聯盟的API包,裏面包含了針對面向切面的接口,通常Spr
maven搭建ssm框架問題總結
error odi more 3.6 env 但是 exception finish ant 1. Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.6.0:compile (de
(轉)java之Spring(IOC)註解裝配Bean詳解
pos work 多個 public pre tor not 註解裝配 creat 在這裏我們要詳細說明一下利用Annotation-註解來裝配Bean。 因為如果你學會了註解,你就再也不願意去手動配置xml文件了,下面就看看Annotation的魅力所在吧。 先
SSM框架搭建總結(2)
jdk bsp jdk安裝 搭建 參考 module 詳情 .cn ace 一、開發環境搭建 1、本地jdk安裝及配置環境變量 2、本地tomcat安裝 3、本地maven安裝 3.1 maven安裝 3.2 maven數據倉庫配置settings.xml 4、本地安裝
spring @Transactional註解參數詳解
正是 SQ com package don ted {} 說明 mda 事物註解方式: @Transactional 當標於類前時, 標示類中所有方法都進行事物處理 , 例子: @Transactional public class TestServiceBea
Hibernate框架環境搭建(詳解)
obj 模型 junit demo 半成品 src 數據表 mys 種類 具體說hibernate框架的項目搭建之前,首先說一下什麽是框架。。。 框架可以理解成一個半成品的項目,它封裝了一些功能,我麽需要掌握的是如何駕馭這些功能,不需要操心它是怎麽實現的。其實他
yum源配置與詳解
gpgkey med mode metadata 查看 grep arch ever manager 一、yum簡介yum是解決rpm軟件包的依賴性而開發的一種軟件包管理器。yum 的宗旨是自動化地升級,安裝/移除rpm 包,收集rpm 包的相關信息,檢查依賴性並自動提示用
spring @Transactional註解參數詳解(13)
基於接口 ack -a 事物 null span ports readonly 可見度 事物註解方式: @Transactional 當標於類前時, 標示類中所有方法都進行事物處理 , 例子: 1 @Transactional public class TestServ
logback日誌模板與詳解
alua ogg back pad 修飾 可選 最小寬度 {0} method <pattern>的轉換符說明: (這部分引用自http://aub.iteye.com/blog/1103685)轉換符 作用 c {length } lo {len
數據結構 - 從二叉搜索樹說到AVL樹(一)之二叉搜索樹的操作與詳解(Java)
判斷 right 不為 exist avl 輸入 位置 bubuko get 二叉搜索樹(Binary Search Tree),簡稱BST,顧名思義,一顆可以用於搜索的二叉樹。BST在數據結構中占有很重要的地位,一些高級樹結構都是其的變種,例如AVL樹、紅黑樹等,因此