Spring注解浅入浅出——不吹牛逼不装逼

  • 2019 年 10 月 3 日
  • 筆記

Spring注解浅入浅出——不吹牛逼不装逼

前情提要

上文书咱们说了《Spring浅入浅出》,对Spring的核心思想看过上篇的朋友应该已经掌握了,此篇用上篇铺垫,引入注解,继续深入学习。

 

引入注解

在Spring框架中,尽管使用XML配置文件可以很简单地装配Bean,但如果应用中有大量的Bean需要装配,会导致XML配置文件过于庞大,不方便以后的升级与维护,因此,推荐开发者使用注解的方式去装配Bean。

 

注解详解

对注解不清楚的可以看我博客《注解》 ,其实注解就是一个类,在开发中使用注解取代XML配置文件。

1. @Component 取代 <bean class=””></bean>
    @Component(“id的值”)

2. web开发中,提供3个@Component注解衍生注解(功能一样)取代 <bean class=””></bean>
    @Repository :dao层
    @Service :service层
    @Controller :web层
        注意:SpringMVC 中推荐使用注解哦!
3. 依赖注入,给私有字段设置,也可以给setter方法设置
    普通值:@Value(“”)
    引用值:
        方式1:按照【类型】注入
            @Autowired
        方式2:按照【类型+名称】注入1
            @Autowired
            @Qualifier(“名称”)
        方式3:按照【名称】注入2
            @Resource(“名称”)
4. 生命周期
    @PostConstruct :初始化
    @PreDestroy :销毁
5. 作用域
    @Scope(“prototype”) 多例

 

配置注解

使用注解有了Bean的实现类,但现在Spring容器并不知道去哪里扫描Bean对象,需要在配置文件中配置注解。

<?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命名空间,通过Spring扫描指定包annotation及子包下所有Bean的实现类,进行注释解析-->      <context:component-scan base-package="com.my"></context:component-scan>    </beans>  

  

 

案例实践

一、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核心依赖-->      <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中的添加功能实现了");        }            @Override        public void delete() {            System.out.println("UserDao中的删除功能实现了");        }            @Override        public void update() {            System.out.println("UserDao中的修改功能实现了");        }            @Override        public void query() {            System.out.println("UserDao中的查询功能实现了");        }    }  

  

 

五、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();        }    }  

  

 

八、测试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();        }    }  

  

 

 

九、测试结果

 

 

 

 

结束总结

看完此篇及上篇的朋友应该掌握Bean的两种常用装配方式,即基于XML配置的装配和基于注解的装配,其中此篇基于注解的装配方式尤其重要,它是当前的主流装配方式。

 

 

 

 

 

 

*****************************************************************************************************

我的博客园地址:https://www.cnblogs.com/zyx110/

转载请说明出处

我不能保证我所说的都是对的,但我能保证每一篇都是用心去写的,我始终认同“分享的越多,你的价值增值越大”,欢迎大家关注我的技术分享“Java匹马行天下”和学习心得分享“匹马行天下”,在分享中进步,越努力越幸运,人生赢在转折处,改变从现在开始!

支持我的朋友们记得点波推荐哦,您的肯定就是我前进的动力。