常用註解(Annotation)整理
1.Java中@Autowired或@Resource這兩個註解功能都是相同的,這兩個註解的區別:@Autowired預設按型別裝配,@Resource預設按名稱裝配,當找不到與名稱匹配的bean時才會按型別裝配。
[email protected]、@Qualifier、@Resource三者的區別:
簡單理解:
@Autowired 預設根據型別注入;
@Resource 預設根據名字注入,其次按照型別注入;
@Autowired @Qualifier(“userService”) 兩個結合起來預設按型別注入,其次按名字注入。
3.spring/springMVC中常用註解對比:
@Configuration — spring配置檔案中的<beans></beans>
@Bean — spring配置檔案中的<bean></bean>
@Autowired 、@Named 兩個註解可以互換使用
@Component 、@Inject兩個註解可以互換使用
@ContextConfiguration — spring整個配置檔案(applicationContext.xml)
@componentScan — spring配置檔案中的<context:component-scan base-package=“xxx”/>
@Service(“name”) — spring配置檔案中的<bean class="xxx" id="name">
id=name
@Scope 代表spring容器的生命週期,取值有singleton、prototype 、request 、session 、global session五種。
注意:request、session和global session型別只實用於web程式,通常是和XmlWebApplicationContext共同使用。
@EnableScheduling:開啟對定時任務的支援;
@Scheduled:宣告一個定時任務;
@Conditional:滿足一定條件來建立一個特定的bean;
@RequestHeader : 可以把Request請求header部分的值繫結到方法的引數上。
Request的Header部分:
Host localhost:8080
Accept text/html,application/xhtml+xml,application/xml;q=0.9
Accept-Language fr,en-gb;q=0.7,en;q=0.3
Accept-Encoding gzip,deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive 300
@RequestMapping("/displayHeaderInfo.do")
public void displayHeaderInfo(
@RequestHeader("Accept-Encoding") String encoding,
@RequestHeader("Keep-Alive") long keepAlive) {
// ...
}
上面的程式碼,把request header部分的 Accept-Encoding的值,繫結到引數encoding上了, Keep-Alive header的值繫結到引數keepAlive上。
@CookieValue : 可以把Request header中關於cookie的值繫結到方法的引數上。
JSESSIONID=415A4AC178C59DACE0B2C9CA727CDD84
@RequestMapping("/displayHeaderInfo.do")
public void displayHeaderInfo(@CookieValue("JSESSIONID") String cookie) {
//...
}
即把JSESSIONID的值繫結到引數cookie上。
@RequestParam :獲取引數;SpringMVC獲取後臺控制層引數有兩種:
1.request.getParameter(“屬性名”); [email protected]。
1.常用來處理簡單型別的繫結,通過Request.getParameter() 獲取的String可直接轉換為簡單型別的情況( String--> 簡單型別的轉換操作由ConversionService配置的轉換器來完成);因為使用request.getParameter()方式獲取引數,所以可以處理get 方式中queryString的值,也可以處理post方式中 body data的值;
2.用來處理Content-Type: 為 application/x-www-form-urlencoded編碼的內容,提交方式GET、POST;
3.該註解有兩個屬性: value、required; value用來指定要傳入值的id名稱,required用來指示引數是否必須繫結;
@Controller
@RequestMapping("/pets")
@SessionAttributes("pet")
public class EditPetForm {
// ...
@RequestMapping(method = RequestMethod.GET)
public String setupForm(@RequestParam("petId") int petId, ModelMap model) {
Pet pet = this.clinic.loadPet(petId);
model.addAttribute("pet", pet);
return "petForm";
}
// ...
@RequestBody : 將HTTP請求正文轉換為適合的HttpMessageConverter物件。[SpringMVC]
@ResponseBody :將內容或物件作為 HTTP 響應正文返回,並呼叫適合HttpMessageConverter的Adapter轉換物件,寫入輸出流。[SpringMVC]
HttpMessageConverter介面,需要開啟<mvc:annotation-driven />。
AnnotationMethodHandlerAdapter將會初始化7個轉換器,可以通過呼叫AnnotationMethodHandlerAdapter的getMessageConverts()方法來獲取轉換器的一個集合 List<HttpMessageConverter>
引用:
ByteArrayHttpMessageConverter
StringHttpMessageConverter
ResourceHttpMessageConverter
SourceHttpMessageConverter
XmlAwareFormHttpMessageConverter
Jaxb2RootElementHttpMessageConverter
MappingJacksonHttpMessageConverter
@SessionAttributes:用來繫結HttpSession中的attribute物件的值,便於在方法中的引數裡使用。該註解有value、types兩個屬性,可以通過名字和型別指定要使用的attribute 物件;
@Controller
@RequestMapping("/editPet.do")
@SessionAttributes("pet")
public class EditPetForm {
// ...
}
@ModelAttribute:
該註解有兩個用法,一個是用於方法上,一個是用於引數上;
用於方法上時: 通常用來在處理@RequestMapping之前,為請求繫結需要從後臺查詢的model;
用於引數上時: 用來通過名稱對應,把相應名稱的值繫結到註解的引數bean上;要繫結的值來源於:
1. @SessionAttributes 啟用的attribute 物件上;
[email protected] 用於方法上時指定的model物件;
3.上述兩種情況都沒有時,new一個需要繫結的bean物件,然後把request中按名稱對應的方式把值繫結到bean中。
用到方法上@ModelAttribute的示例程式碼:
// Add one attribute
// The return value of the method is added to the model under the name "account"
// You can customize the name via @ModelAttribute("myAccount")
@ModelAttribute
public Account addAccount(@RequestParam String number) {
return accountManager.findAccount(number);
}
這種方式實際的效果就是在呼叫@RequestMapping的方法之前,為request物件的model裡put(“account”, Account);
用在引數上的@ModelAttribute示例程式碼:
@RequestMapping(value="/owners/{ownerId}/pets/{petId}/edit", method = RequestMethod.POST)
public String processSubmit(@ModelAttribute Pet pet) {
//......
}
首先查詢 @SessionAttributes有無繫結的Pet物件,若沒有則查詢@ModelAttribute方法層面上是否綁定了Pet物件,若沒有則將URI template中的值按對應的名稱繫結到Pet物件的各屬性上。
問題:在不給定註解的情況下,引數是怎樣繫結的?
通過分析AnnotationMethodHandlerAdapter和RequestMappingHandlerAdapter的原始碼發現,方法的引數在不給定引數的情況下:
若要繫結的物件時簡單型別: 呼叫@RequestParam來處理的。
若要繫結的物件時複雜型別: 呼叫@ModelAttribute來處理的。
這裡的簡單型別指java的原始型別(boolean, int 等)、原始型別物件(Boolean, Int等)、String、Date等ConversionService裡可以直接String轉換成目標物件的型別;
@PathVariable : 當使用@RequestMapping URI template 樣式對映時, 即someUrl/{paramId}, 這時的paramId可通過@Pathvariable註解繫結它傳過來的值到方法的引數上。[SpringMVC]
例如:
@Controller
@RequestMapping("/owners/{ownerId}")
public class RelativePathUriTemplateController {
@RequestMapping("/pets/{petId}")
public void findPet(@PathVariable String ownerId,@PathVariable String petId, Model model) {
// implementation omitted
}
}
@SuppressWarnings(value=”unchecked”):用於抑制編譯器產生警告資訊。value預設為checked。
@PropertySource:注入配置檔案;
@Value():讀取引數;詳細原理如下講解:
@Value()需要的引數有兩種形式:@Value("#{configProperties['t1.msgname']}")或者@Value("${t1.msgname}")
配置上的區別:
1.@Value("#{configProperties['t1.msgname']}")這種形式的配置中有“configProperties”,其實它指定的是配置檔案的載入物件:配置如下:
<bean id="configProperties"
class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="locations">
<list>
<value>classpath:/config/t1.properties</value>
</list>
</property>
</bean>
這樣配置就可完成對屬性的具體注入了
2.@Value("${t1.msgname}")這種形式不需要指定具體載入物件,這時候需要一個關鍵的物件來完成PreferencesPlaceholderConfigurer,這個物件的配置可以利用上面配置1中的配置,也可以自己直接自定配置檔案路徑。
如果使用配置1中的配置,可以寫成如下情況:
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
<property name="properties" ref="configProperties" />
</bean>
如果直接指定配置檔案的話,可以寫成如下情況:
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
<property name="location">
<value>config/t1.properties</value>
</property>
</bean>
@JmsListener:監聽消費,實現了非同步消費。
在官方文件中已經說明需要支援@JmsListener註解,則需要在任意@Configuration類新增@EnableJms註解,同時還需要配置DefaultJmsListenerContainerFactory的Bean例項:
Bean方式配置:
@Configuration
@EnableJms
public class GatewayActiveMQFactory extends AbstractActiveMQFactory {
//……
}
XML方式配置:
<jms:annotation-driven/>
<bean id="jmsListenerContainerFactory" class="org.springframework.jms.config.DefaultJmsListenerContainerFactory">
<property name="connectionFactory" ref="connectionFactory"/>
<property name="destinationResolver" ref="destinationResolver"/>
<property name="concurrency" ref="3-10"/>
</bean>
@EnableWs: 啟動webservice。
Spring Boot整合spring-ws開發web service
1.新增依賴
spring boot的工程,除了spring boot外還需要新增spring-ws和wsdl4j的依賴,當然後面生成程式碼還需要新增maven的jaxb2外掛。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web-services</artifactId>
</dependency>
<dependency>
<groupId>wsdl4j</groupId>
<artifactId>wsdl4j</artifactId>
<version>1.6.3</version>
</dependency>
2.編寫schema檔案
spring-ws的釋出,都是以一個schema檔案(xsd)定義開始的,它描述了web service的引數以及返回的資料。
下面是官方示例給出的countries.xsd,這裡我們也以它為例,當然名稱空間改掉了,因為等會jaxb2外掛生成程式碼是以它來確定包名的:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema";
xmlns:tns="UpdateAppAcctSoap";//由程式設計師自己定義
targetNamespace="UpdateAppAcctSoap"; //由程式設計師自己定義
elementFormDefault="qualified">
<xs:element name="RequestInfo">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string" />
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="ResponseInfo">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string" />
</xs:simpleContent>
</xs:complexType>
</xs:element>
<!--
<xs:element name="getCountryRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="getCountryResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="country" type="tns:country"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="country">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="population" type="xs:int"/>
<xs:element name="capital" type="xs:string"/>
<xs:element name="currency" type="tns:currency"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="currency">
<xs:restriction base="xs:string">
<xs:enumeration value="GBP"/>
<xs:enumeration value="EUR"/>
<xs:enumeration value="PLN"/>
</xs:restriction>
</xs:simpleType>
-->
</xs:schema>
3.新增maven的jaxb2外掛來生成程式碼
jaxb2外掛可以根據描述的xsd檔案來幫我們生成相應的ws程式碼,具體配置如下:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<id>xjc</id>
<goals>
<goal>xjc</goal>
</goals>
</execution>
</executions>
<configuration>
<schemaDirectory>${project.basedir}/src/main/resources//schema</schemaDirectory>
<outputDirectory>${project.basedir}/src/main/java</outputDirectory>
<clearOutputDir>false</clearOutputDir>
</configuration>
</plugin>
配置好外掛然後install一下,這樣web service需要的服務端程式碼就已經幫我們生成好了,根據上面的xsd,生成的程式碼在相應的包下。
4.編寫Endpoint
我們就不再像spring-ws官方那樣再建一個Repository了,這裡直接返回。需要注意PayloadRoot註解當中的namespace和localPart需要和xsd中對應。
@Endpoint
public class UpdateAppAcctSoap extends RestBase {
private static final String NAMESPACE_URI = "UpdateAppAcctSoap";
private final Logger logger = LoggerFactory.getLogger(UpdateAppAcctSoap.class);
@Autowired
HttpServletRequest request;
@Autowired
ILog iLog;
@Autowired
IUpdateAppAcctService appAcctService;
@PayloadRoot(namespace = NAMESPACE_URI, localPart = "RequestInfo")
@ResponsePayload
public ResponseInfo doService(@RequestPayload RequestInfo requestInfo) {
iLog.info(logger, getTransNo(request), null, "", requestInfo);
String res = appAcctService.doService(requestInfo.getValue(), getTransNo(request));
ResponseInfo responseInfo = new ResponseInfo();
responseInfo.setValue(res);
return responseInfo;
}
}
【RequestInfo類的寫法:】
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"value"
})
@XmlRootElement(name = "RequestInfo", namespace = "UpdateAppAcctSoap")
public class RequestInfo {
@XmlValue
protected String value;
/**
* 獲取value屬性的值。
* @return
* possible object is
* {@link String }
*/
public String getValue() {
return value;
}
/**
* 設定value屬性的值。
* @param value
* allowed object is
* {@link String }
*/
public void setValue(String value) {
this.value = value;
}
}
【ResponseInfo類的寫法:】
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"value"
})
@XmlRootElement(name = "ResponseInfo", namespace = "UpdateAppAcctSoap")
public class ResponseInfo {
@XmlValue
protected String value;
/**
* 獲取value屬性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getValue() {
return value;
}
/**
* 設定value屬性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setValue(String value) {
this.value = value;
}
}
5.在spring boot中配置web service
@EnableWs
@Configuration
public class WebServiceConfig extends WsConfigurerAdapter {
@Bean
public ServletRegistrationBean messageDispatcherServlet(ApplicationContext applicationContext) {
MessageDispatcherServlet servlet = new MessageDispatcherServlet();
servlet.setApplicationContext(applicationContext);
servlet.setTransformWsdlLocations(true);
return new ServletRegistrationBean(servlet, "/webservice/*");
}
@Bean(name = "UpdateAppAcctSoap")
public DefaultWsdl11Definition defaultWsdl11Definition(XsdSchema countriesSchema) {
DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition();
wsdl11Definition.setPortTypeName("UpdateAppAcctSoap");
wsdl11Definition.setLocationUri("/webservice");
wsdl11Definition.setTargetNamespace(Access4aConstants.NAMESPACE);
wsdl11Definition.setSchema(countriesSchema);
return wsdl11Definition;
}
@Bean
public XsdSchema countriesSchema() {
return new SimpleXsdSchema(new ClassPathResource("UpdateAppAcctSoap.xsd"));
}
}
到這裡spring-ws的所有配置和工作都已經完成了,上面的DefaultWsdl11Definition 中的name預設就是釋出的ws的訪問路徑。
4.Spirng中@PostConstruce和@PreDestroy詳解:
這兩個註解作用於Servlet生命週期的註解,實現Bean初始化之前和銷燬之前的自定義操作。
API文件說明:
@PostConstruct 註釋用於在依賴關係注入完成之後需要執行的方法上,以執行任何初始化。此方法必須在將類放入服務之前呼叫。支援依賴關係注入的所有類都必須支援此註釋。即使類沒有請求注入任何資源,用 PostConstruct 註釋的方法也必須被呼叫。只有一個方法可以用此註釋進行註釋。應用 PostConstruct 註釋的方法必須遵守以下所有標準:該方法不得有任何引數,除非是在 EJB 攔截器 (interceptor) 的情況下,根據 EJB 規範的定義,在這種情況下它將帶有一個 InvocationContext 物件 ;該方法的返回型別必須為 void;該方法不得丟擲已檢查異常;應用 PostConstruct 的方法可以是 public、protected、package private 或 private;除了應用程式客戶端之外,該方法不能是 static;該方法可以是 final;如果該方法丟擲未檢查異常,那麼不得將類放入服務中,除非是能夠處理異常並可從中恢復的 EJB。
使用@PostConstruce和@PreDestroy註解應注意:
- 只有一個方法可以使用此註釋進行註解;
- 被註解方法不得有任何引數;
- 被註解方法返回值為void;
- 被註解方法不得丟擲已檢查異常;
- 被註解方法需是非靜態方法;
此方法只會被執行一次;
Servlet執行流程圖:
在具體Bean的例項化過程中,@PostConstruce註釋的方法,會在構造方法之後,init()方法之前呼叫。
@PostConstruce主要應用在初始化Servlet時載入一些快取資料。
注意:此註解會影響服務的啟動時間;在啟動時會掃描WEB-INF/classes的所有檔案和WEB-INF/lib下的所有jar包。
[email protected]和@RestContoller[SpringMVC] 區別:
官方文件:
@RestController is a stereotype annotation that combines @ResponseBody and @Controller.
意思是:
@RestController註解相當於@ResponseBody + @Controller合在一起的作用。如果只是使用@RestController註解Controller,則Controller中的方法無法返回jsp頁面,配置的檢視解析器InternalResourceViewResolver不起作用,返回的內容就是Return 裡的內容。
例如:本來應該到success.jsp頁面的,則其顯示success.如果需要返回到指定頁面,則需要用 @Controller配合檢視解析器InternalResourceViewResolver才行。
如果需要返回JSON,XML或自定義mediaType內容到頁面,則需要在對應的方法上加上@ResponseBody註解。
@WiselyConfiguration註解相當於@Configuration + @ComponentScan
6.Enable*註解:
@EnableAspectJAutoProxy:開啟對AspectJ自動代理的支援;
@EnableAsync:開啟非同步方法的支援;
@EnableScheduling:開啟定時任務的支援;
@EnableWebMvc:開啟Web MVC配置的支援;
@EnableConfigurationProperties:開啟對@ConfigurationProperties註解配置Bean的支援;
@EnableJpaRespositories:開啟對Spring Data JPA Repository的支援;
@EnableTransactionManagement:開啟註解式事務的支援;
@EnableCaching:開啟註解式的快取支援;
@ActiveProfiles:宣告活動的profile;
@Profile(“dev”):指定環境;
7.SpringMVC常用註解:
@ControllerAdvice:宣告一個控制器建言(全域性);l
@ExceptionHandler:全域性處理控制器裡的異常;
@InitBinder:定製WebDataBinder;
相關推薦
常用註解(Annotation)整理
1.Java中@Autowired或@Resource這兩個註解功能都是相同的,這兩個註解的區別:@Autowired預設按型別裝配,@Resource預設按名稱裝配,當找不到與名稱匹配的bean時才會按型別裝配。 [email protected]
Android註解(Annotation)知識點總結整理
Java提供了Annotations來對程式碼提供一些註解,以解釋、約束程式碼,也可以稱為程式設計的元資料。到底什麼是Annotation呢,舉幾個大家熟悉的例子如@Override(表示過載)、@Deprecated(表示下述方法不推薦使用,通常標註為此會提供推薦方法)等
深入理解Java:註解(Annotation)--註解處理器
fault this urn 復制代碼 lena ide set java lec 深入理解Java:註解(Annotation)--註解處理器 如果沒有用來讀取註解的方法和工作,那麽註解也就不會比註釋更有用處了。使用註解的過程中,很重要的一部分就是創建於
深入理解Java的註解(Annotation):註解處理器(3)
isp 通過反射 out peid 擴展 .cn 自定義註解 忽略 否則 如果沒有用來讀取註解的方法和工作,那麽註解也就不會比註釋更有用處了。使用註解的過程中,很重要的一部分就是創建於使用註解處理器。Java SE5擴展了反射機制的API,以幫助程序員快速的構造自定義註解處
秒懂,Java 註解 (Annotation)你可以這樣學
face 幹什麽 有一種 博客 作用 習慣 lis 如果 手機 這處圖片引自老羅的博客。為了避免不必要的麻煩,首先聲明我個人比較尊敬老羅的。至於為什麽放這張圖,自然是為本篇博文服務,接下來我自會說明。好了,可以開始今天的博文了。 Annotation 中文譯過來就是註解、
Java 註解 (Annotation)
null lambda roi 實例 cut exce runt 比較 符號 Java 註解用於為 Java 代碼提供元數據。作為元數據,註解不直接影響你的代碼執行,但也有一些類型的註解實際上可以用於這一目的。Java 註解是從 Java5 開始添加到 Java 的。
秒懂Java 註解 (Annotation)
能夠 extend tty 來講 hub 開頭 arrays term con 文章開頭先引入一處圖片。 這處圖片引自老羅的博客。為了避免不必要的麻煩,首先聲明我個人比較尊敬老羅的。至於為什麽放這張圖,自然是為本篇博文服務,接下來我自會說明。好了,可以開始今天的博文了。 A
註解(Annotation)
nali 函數 測試 after har float 等等 特點 類方法 常見註解 註解的概念:Java 註解用於為 Java 代碼提供元數據。作為元數據,註解不直接影響你的代碼執行,但也有一些類型的註解實際上可以用於這一目的。Java 註解是從 Java5 開始添加到 J
【Java基礎】註解(Annotation)
Annotation,程式碼裡的特殊標記,在編譯、類載入、執行時被讀取,並執行相應的處理。 使用註解,在不改變原有邏輯的情況下,在原始檔中嵌入一些補充資訊。 Annotation提供了一種為程式元素設定元資料的方法。 Ann
java註解(Annotation)總結
java註解(Annotation)總結 吐糟時間 註解是什麼 註解有什麼用 註解的分類 怎麼自定義註解 新增屬性 註解的使用 解析執行時(RUNTIME)註解 解析編譯時(CLASS)註解
Java 註解 (Annotation)淺入深出
Java 註解 (Annotation)淺入深出 本文主要參考與借鑑frank909 文章,但更為簡單,詳細。 Annotation 中文譯過來就是註解、標釋的意思。Annotation是一種應用於類、方法、引數、變數、構造器及包宣告中的特殊修飾符。它是一種由JSR-175標準選擇用來描述元資料的一種工具
Sping註解(annotation)
1.依賴注入的註解(DI-annotation) @Component註解元件:註冊元件到spring容器中,相當於配置檔案中的bean. 與@Component具有相同功能,不同意義
Springboot的Controller中常用註解(一)
@Controller和@RestController和@ResponseBody @Controller @Controller註解標註類的方法,return時會被檢視處理器識別成靜態檔案的路徑。預設為templates資料夾下。如return "test/hello"表示
Java註解(Annotation)學習總結
註解的定義 註解通過 @interface 關鍵字進行定義。 public @interface TestAnnotation { } 它的形式跟介面很類似,不過前面多了一個 @ 符號。上面的程式碼就建立了一個名字為 TestAnnotaion 的註解。你可以簡
Java——註解(Annotation)
註解(Annotation) JDK提供的三個內建註解:@Override、@Deprecated、@SuppressWarnings 1.準確覆寫@Override 檢查當前類中的覆寫方法與父類中定義的同名方法是否相同,如果有任何一個地方不同,編譯報錯 2.過期處理
自定義Java註解(annotation)
https://www.imooc.com/learn/456 筆記 Java從1.5開始引進註解。 首先解決一個問題,為什麼要學習Java註解? 1.看懂別人寫的程式碼,尤其是框架的程式碼 2.可以是自己寫的程式碼簡潔清晰 現在開始學習Java註解了。
Spring Boot常用註解(二)
1.概述 在 Spring Boot常用註解(一) - 宣告Bean的註解 中學習了Spring Boot中宣告Bean的註解 那Spring容器中的Bean是怎麼實現自動裝配(依賴)的呢? 這就是接下來學習的注入註解咯 注入Bean的註解: @Au
Spring學習(1):控制反轉(IoC)和依賴注入(DI)的詳解以及註解(annotation)開發入門案例
前言 以往的java學習中,我們要想得到一個物件,就把它new出來。如:Apple apple = new Apple(); 在一些複雜的系統中,一個物件A可能依賴於物件B,C等(程式碼表現為A類持有B,C類的物件作為A類的屬性)。以往來說,我們想要使用B,
Java 註解 (Annotation)你可以這樣學
這處圖片引自老羅的部落格。為了避免不必要的麻煩,首先宣告我個人比較尊敬老羅的。至於為什麼放這張圖,自然是為本篇博文服務,接下來我自會說明。好了,可以開始今天的博文了。Annotation 中文譯過來就是註解、標釋的意思,在 Java 中註解是一個很重要的知識點,但經常還是有點
深入理解Java:註解(Annotation)自定義註解
要深入學習註解,我們就必須能定義自己的註解,並使用註解,在定義自己的註解之前,我們就必須要了解Java為我們提供的元註解和相關定義註解的語法。 元註解: 元註解的作用就是負責註解其他註解。Java5.0定義了4個標準的meta-annotation型別,它們被用來