zoukankan      html  css  js  c++  java
  • Spring实践第六天(Spring全注解的方式)

    说明

    如图,项目目录:

     

     

     

    注解的方式:

    1.目标:省略掉在xml中配置bean!

    2.方式

    • 先在主配置文件,告知要开启注解模式:<context:annotation-config/>
    • 在相关的类的方法上加注解

    一、在xml文档中加入<context:component-scan base-package="com.nenu"/>

     如果要使用注解,首先要在xml文件中配置注解模式(使项目允许使用注解):

       在applicationContext加入<context:annotation-config/>标签:

    <?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-3.0.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
    
    <!-- 开启扫描 --> <context:component-scan base-package="com.nenu"/> </beans>

    二、添加注解

    1.UserDaoImpl

      添加了@Component标签,因为是DAO层,所以也可@Repository标签:

    package com.nenu.dao.impl;
    
    import com.nenu.dao.UserDao;
    import org.springframework.stereotype.Component;
    
    @Component
    public class UserDaoImpl implements UserDao {
        @Override
        public void add() {
            System.out.println("UserDaoImpl add……");
        }
    }

    相当于配置了<bean id="userDaoImpl" class="com.nenu.dao.impl.UserDaoImpl"/>

    2.UserServiceImpl

      添加了@component标签,setter里面Resourse标签的name改为userServiceImpl

    (因为是自动配置的,所以dao层的对象名字直接就是UserServiceImpl类名首字母小写)

    当然,由于是Service层的逻辑,也可以用@Service:

    package com.nenu.service.impl;
    
    import com.nenu.dao.UserDao;
    import com.nenu.dao.impl.UserDaoImpl;
    import com.nenu.service.UserService;
    import org.springframework.stereotype.Component;
    import javax.annotation.Resource;
    
    @Component
    public class UserServiceImpl implements UserService {
        private UserDao userDao;//面向接口
    
        @Override
        public void add() {
            System.out.println("UserServiceImpl add……");
            userDao.add();
        }
    
    //    这是一个setter方法,设置userDao属性的值
        @Resource(name = "userDaoImpl")
        public void setUserDao(UserDaoImpl userDao) {
            this.userDao = userDao;
        }
    
    //    这是构造方法,设置userDao属性的值
        public UserServiceImpl(UserDao userDao) {
            this.userDao = userDao;
        }
    
        public UserServiceImpl(){}
    
    }

    相当于配置<bean id="userServiceImpl" class="com.nenu.service.impl.UserServiceImpl"/>

    3.测试

    package com.nenu;
    
    import com.nenu.service.UserService;
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class IocTest {
        @Test
        public void UserTest(){
            //1.配置容器
            ApplicationContext applicationContext =
                    new ClassPathXmlApplicationContext("applicationContext.xml");
            //2.取出容器中bean
            UserService userService =
                    (UserService) applicationContext.getBean("userServiceImpl");
            //3.调用
            userService.add();
        }
    }

    取出容器中bean时,bean的指定名字别忘了改奥~

      通过!!!

    三、常用注解及总结

    1.常用注解:

    注解解释
    @Controller 应用在MVC层(控制层),DispatcherServlet会自动扫描注解了此注解的类,然后将web请求映射到注解了@RequestMapping的方法上。
    @Service 应用在service层(业务逻辑层)
    @Reponsitory 应用在dao层(数据访问层)
    @Component

    相当于一个默认的注解:<bean id="xxxxx" class="xxxxx"/>

    2.总结:

    PS:附上昨天bean的自动装配链接,今天的看不懂建议同时参考昨天的博客:

    Spring实践第五天(基于注解实现bean的自动装配)

     到此Spring的全注解就完成啦!小伙伴们有问题欢迎一起探讨!加油~

  • 相关阅读:
    IOS Charles(代理服务器软件,可以用来拦截网络请求)
    Javascript中addEventListener和attachEvent的区别
    MVC中实现Area几种方法
    Entity Framework Code First 中使用 Fluent API 笔记。
    自定义JsonResult解决 序列化类型 System.Data.Entity.DynamicProxies 的对象时检测到循环引用
    序列化类型 System.Data.Entity.DynamicProxies 的对象时检测到循环引用
    An entity object cannot be referenced by multiple instances of IEntityChangeTracker 的解决方案
    Code First :使用Entity. Framework编程(8) ----转发 收藏
    Code First :使用Entity. Framework编程(6) ----转发 收藏
    Code First :使用Entity. Framework编程(5) ----转发 收藏
  • 原文地址:https://www.cnblogs.com/yangf428/p/12302982.html
Copyright © 2011-2022 走看看