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

原文地址:https://www.cnblogs.com/yangf428/p/12302982.html