Spring注解淺入淺出——不吹牛逼不裝逼
前情提要
上文書(shū)咱們說(shuō)了《Spring淺入淺出 <https://www.cnblogs.com/zyx110/p/11306998.html>
》,對(duì)Spring的核心思想看過(guò)上篇的朋友應(yīng)該已經(jīng)掌握了,此篇用上篇鋪墊,引入注解,繼續(xù)深入學(xué)習(xí)。
?
引入注解
在Spring框架中,盡管使用XML配置文件可以很簡(jiǎn)單地裝配Bean,但如果應(yīng)用中有大量的Bean需要裝配,會(huì)導(dǎo)致XML配置文件過(guò)于龐大,不方便以后的升級(jí)與維護(hù),因此,推薦開(kāi)發(fā)者使用注解的方式去裝配Bean。
?
注解詳解
對(duì)注解不清楚的可以看我博客《注解 <https://www.cnblogs.com/zyx110/p/10728595.html>
》?,其實(shí)注解就是一個(gè)類(lèi),在開(kāi)發(fā)中使用注解取代XML配置文件。
1.?@Component?取代?<bean?class=""></bean>
? ? @Component("id的值")
2.?web開(kāi)發(fā)中,提供3個(gè)@Component注解衍生注解(功能一樣)取代?<bean?class=""></bean>
????@Repository?:dao層
????@Service?:service層
????@Controller?:web層
????????注意:SpringMVC?中推薦使用注解哦!
3.?依賴(lài)注入,給私有字段設(shè)置,也可以給setter方法設(shè)置
????普通值:@Value("")
????引用值:
????????方式1:按照【類(lèi)型】注入
????????????@Autowired
????????方式2:按照【類(lèi)型+名稱(chēng)】注入1
????????????@Autowired
????????????@Qualifier("名稱(chēng)")
????????方式3:按照【名稱(chēng)】注入2
????????????@Resource("名稱(chēng)")
4.?生命周期
????@PostConstruct?:初始化
????@PreDestroy?:銷(xiāo)毀
5.?作用域
????@Scope("prototype")?多例
?
配置注解
使用注解有了Bean的實(shí)現(xiàn)類(lèi),但現(xiàn)在Spring容器并不知道去哪里掃描Bean對(duì)象,需要在配置文件中配置注解。
<?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"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd ">
<!—使用context命名空間,通過(guò)Spring掃描指定包annotation及子包下所有Bean的實(shí)現(xiàn)類(lèi),進(jìn)行注釋解析-->
<context:component-scan base-package="com.my"></context:component-scan> </beans>
?
案例實(shí)踐
一、Pom.xml
<dependencies> <dependency> <groupId>junit</groupId>
<artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope>
</dependency> <dependency> <groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId> <version>3.1.0</version>
</dependency> <dependency> <groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency>
<groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId>
<version>1.2</version> </dependency> <!--spring核心依賴(lài)--> <dependency>
<groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version> </dependency> <dependency>
<groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId>
<version>5.1.5.RELEASE</version> </dependency> <dependency>
<groupId>org.springframework</groupId> <artifactId>spring-context</artifactId>
<version>5.1.5.RELEASE</version> </dependency> <dependency>
<groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId>
<version>5.1.5.RELEASE</version> </dependency> <dependency>
<groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId>
<version>5.1.5.RELEASE</version> </dependency> <dependency>
<groupId>org.springframework</groupId> <artifactId>spring-web</artifactId>
<version>5.1.5.RELEASE</version> </dependency> <dependency>
<groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId>
<version>5.1.5.RELEASE</version> </dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId> <version>5.1.5.RELEASE</version>
</dependency> <dependency> <groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId> <version>5.1.5.RELEASE</version>
</dependency> </dependencies>
?
?
二、spring-config.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"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd "> <!--配置注解要掃描的包-->
<context:component-scan base-package="com.my"></context:component-scan> </beans>
三、UserDao
package com.my.dao; public interface UserDao { public void add(); public void
delete(); public void update(); public void query(); }
?
四、UserDaoImpl
package com.my.dao.impl; import com.my.dao.UserDao; import
org.springframework.stereotype.Repository; @Repository public class UserDaoImpl
implements UserDao { @Override public void add() {
System.out.println("UserDao中的添加功能實(shí)現(xiàn)了"); } @Override public void delete() {
System.out.println("UserDao中的刪除功能實(shí)現(xiàn)了"); } @Override public void update() {
System.out.println("UserDao中的修改功能實(shí)現(xiàn)了"); } @Override public void query() {
System.out.println("UserDao中的查詢(xún)功能實(shí)現(xiàn)了"); } }
?
五、UserService
package com.my.service; public interface UserService { public void add();
public void delete(); public void update(); public void query(); }
?
六、UserServiceImpl
package com.my.service.impl; import com.my.dao.UserDao; import
com.my.dao.impl.UserDaoImpl; import com.my.service.UserService; import
org.springframework.stereotype.Service; @Service public class UserServiceImpl
implements UserService { private UserDao userDao = new UserDaoImpl(); @Override
public void add() { userDao.add(); } @Override public void delete() {
userDao.delete(); } @Override public void update() { userDao.update(); }
@Override public void query() { userDao.query(); } }
?
七、UserController
package com.my.controller; import com.my.service.UserService; import
org.springframework.beans.factory.annotation.Autowired; import
org.springframework.stereotype.Component; import
org.springframework.stereotype.Controller; import
org.springframework.stereotype.Service; @Controller public class UserController
{ @Autowired private UserService userService; public void add(){
userService.add(); } public void delete(){ userService.delete(); } public void
update(){ userService.update(); } public void query(){ userService.query(); } }
?
八、測(cè)試Test2
package com.my.test; import com.my.controller.UserController; import
org.springframework.context.ApplicationContext; import
org.springframework.context.support.ClassPathXmlApplicationContext; public
class Test2 { public static void main(String[] args) { ApplicationContext
appCon = new ClassPathXmlApplicationContext("spring-config.xml");
UserController userController = (UserController)
appCon.getBean("userController"); userController.add();
userController.delete(); userController.update(); userController.query(); } }
?
?
九、測(cè)試結(jié)果
?
?
?
?
結(jié)束總結(jié)
看完此篇及上篇的朋友應(yīng)該掌握Bean的兩種常用裝配方式,即基于XML配置的裝配和基于注解的裝配,其中此篇基于注解的裝配方式尤其重要,它是當(dāng)前的主流裝配方式。
?
?
?
?
?
?
*****************************************************************************************************
我的博客園地址:https://www.cnblogs.com/zyx110/ <https://www.cnblogs.com/zyx110/>
轉(zhuǎn)載請(qǐng)說(shuō)明出處
我不能保證我所說(shuō)的都是對(duì)的,但我能保證每一篇都是用心去寫(xiě)的,我始終認(rèn)同“分享的越多,你的價(jià)值增值越大”,歡迎大家關(guān)注我的技術(shù)分享“Java匹馬行天下”和學(xué)習(xí)心得分享“匹馬行天下”,在分享中進(jìn)步,越努力越幸運(yùn),人生贏在轉(zhuǎn)折處,改變從現(xiàn)在開(kāi)始!
支持我的朋友們記得點(diǎn)波推薦哦,您的肯定就是我前進(jìn)的動(dòng)力。
?
?
熱門(mén)工具 換一換
