欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring---使用注解装配Bean(三)

程序员文章站 2024-02-16 10:41:34
...

(一)基于Annotation的装配

1.为什么要使用Annotation的装配Bean?

传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop、事物,这么做有两个缺点:

  1. 如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大;如果按需求分开.xml文件,那么.xml文件又会非常多。总之这将导致配置文件的可读性与可维护性变得很低。
  2. 在开发中在.java文件和.xml文件之间不断切换,是一件麻烦的事,同时这种思维上的不连贯也会降低开发的效率。
  3. Spring引入了注解,通过”@XXX”的方式,让注解与Java Bean紧密结合,既大大减少了配置文件的体积,又增加了Java Bean的可读性与内聚性。同时提升了开发效率。
2.Spring中常用的注解
注解 说明
@Component 在Spring中使用@Component注解Bean,但@Component只代表一个组件(Bean),使用时只需要将该注解标注相应类上即可。
@ Repository @Repository对应数据访问层(DAO),例如使用@Repository(value=”userDao”)注解是告诉Spring,让Spring创建一个名字叫”userDao”的UserDaoImpl实例,其功能和@Component一样。
@Service @Service标注的是业务层逻辑处理类Bean,比如使用@Service(“userService”)注解是告诉Spring,当Spring要创建UserServiceImpl的的实例时,bean的名字必须叫做”userService”,其功能和@Component一样。
@Controller @Controller用于标注在控制类(比如Spring MVC的Controller),比如使用@Controller注解标识UserController之后,就表示要把UserController交给Spring容器管理,在Spring容器中会存在一个名字为”userController”的Controller,这个名字是根据UserController类名来取的。注:如果@Controller不指定其value【@Controller】,则默认的bean名字为这个类的类名首字母小写,如果指定value【@Controller(value=”UserController”)】或者【@Controller(“UserController”)】,则使用value作为bean的名字。其功能和@Component一样。
@Autowired @Autowired顾名思义,就是自动装配,其作用是为了消除代码Java代码里面的getter/setter与bean属性中的property。当然,getter看个人需求,如果私有属性需要对外提供的话,应当予以保留。@Autowired默认按类型匹配的方式,在容器查找匹配的Bean,当有且仅有一个匹配的Bean时,Spring将其注入@Autowired标注的变量中。可以在 setter 方法中被用于自动连接bean
@Resource 功能与@Autowired一样,其区别在于@Autowired默认按照类型装配,而@Resource按照Bean实例名称进行装配。@Resource有两个属性:name和type,Spring将name解析为Bean的实例名,type解析为Bean实例类型。 @Resource的装配顺序:aaa@qq.com后面没有任何内容,默认通过name属性去匹配bean,找不到再按type去匹。2.指定了name或者type则根据指定的类型去匹配bean。3,指定了name和type则根据指定的name和type去匹配bean,任何一个不匹配都将报错。
@Qualifier 如果容器中有一个以上匹配的Bean,则可以通过@Qualifier注解限定Bean的名称,指定哪个真正的bean将会被装配,应用于一个接口有多个实现类的情况。
@RequestMapping 在SpringMVC中的Controller类中标注@RequestMapping用于指定请求路径
@RequestBody 返回json结果数据

(二)使用注解装配Bean实例演示

项目结构图
Spring---使用注解装配Bean(三)Spring---使用注解装配Bean(三)

1.在com.wang.dao创建UserDao.java接口类
package com.wang.dao;
//创建用户接口
public interface UserDao {
    public void delete();
}
2.在com.wang.daoImp创建UserDaoImp.java实现类
package com.wang.daoImp;
import org.springframework.stereotype.Repository;
import com.wang.dao.UserDao;
//创建用户实现类,当扫描到@Repository注解时,自动创建UserDaoImp对象
@Repository(value="userDaoImp")
public class UserDaoImp implements UserDao {

    public void delete() {
        System.out.println("delete User");
    }
}
3.在com.wang.service创建UserService.java接口类
package com.wang.service;
//创建UserService接口
public interface UserService {
    public void delete();
}
4.在com.wang.serviceImp创建UserServiceImp.java实现类
package com.wang.serviceImp;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.wang.daoImp.UserDaoImp;
import com.wang.service.UserService;
//自动创建 UserServiceImp实现类对象
@Service(value="userServiceImp")
public class UserServiceImp implements UserService  {
    //将创建名称为userDaoImp的UserDaoImp对象依赖注入到userDaoImp变量
    @Resource(name="userDaoImp")
    private UserDaoImp userDaoImp;
    public void delete() {
        userDaoImp.delete();
    }
}
5.在com.wang.controller创建UserController.java类
package com.wang.controller;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import com.wang.service.UserService;
//使用@Controller自动创建 UserController对象
@Controller(value=" userController")
public class UserController {
   @Resource(name="userServiceImp") 
   private UserService userService;
   public void delete() {
       userService.delete();
   }

}
6.在src下创建spring.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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-4.3.xsd">

    <!--因为使用注解,所以使用包扫描!  -->
    <context:component-scan base-package="com.wang.serviceImp,
                                          com.wang.daoImp,
                                          com.wang.controller"/>
</beans>
7.在com.wang.test包下创建TestDemo1.java测试类
package com.wang.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.wang.controller.UserController;
public class TestDemo1 {

    public static void main(String[] args) {
         @SuppressWarnings("resource")
         ApplicationContext con=new
         ClassPathXmlApplicationContext("spring.xml");
         UserController  userController= (  UserController)
         con.getBean(" userController", UserController.class );
         userController.delete();
    }
}

上一篇: Java集合学习笔记

下一篇: