• 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的全注解就完成啦!小伙伴们有问题欢迎一起探讨!加油~

  • 相关阅读:
    poj3068
    tyvj1864 [Poetize I]守卫者的挑战
    BZOJ1597 [Usaco2008 Mar]土地购买
    [AtCoder Regular Contest 083] Bichrome Tree
    [LUOGU]3919 【模板】可持久化数组
    [LUOGU]P3701 主席树(假的)
    2018.7.20模拟赛
    [CodeForces]1006F Xor Path
    2018.7.19模拟赛
    [LUOGU]P1373 小a和uim之大逃离
  • 原文地址:https://www.cnblogs.com/yangf428/p/12302982.html
Copyright © 2020-2023  润新知