Spring的Java配置

Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置。

1、注解Configuration 和 注解@Bean

Spring的Java配置方式是通过 @Configuration 和 @Bean 这两个注解实现的:

1、@Configuration 作用于类上,相当于一个xml配置文件;

2、@Bean 作用于方法上,相当于xml配置中的<bean id=”” class=””></bean>;

2、示例一

该示例演示了通过Java配置的方式进行配置Spring,并且实现了Spring IOC功能。

1创建工程以及导入依赖

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <!-- spring版本号 -->
    <spring.version>4.3.2.RELEASE</spring.version>
</properties>
<dependencies>
    <!-- 配置servlet -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.0.1</version>
        <scope>provided</scope>
    </dependency>
    <!-- 配置jsp -->
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>javax.servlet.jsp-api</artifactId>
        <version>2.2.1</version>
        <scope>provided</scope>
    </dependency>
    <!-- spring4.3.2 -->
    <!-- spring-context -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <!-- spring-core -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <!-- spring-beans -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <!-- 添加数据库连接池 druid -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.3</version>
    </dependency>
    <!-- spring-aop -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <!-- aspectjweaver -->
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.6.11</version>
    </dependency>
    <!-- aspectjrt -->
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
        <version>1.6.11</version>
    </dependency>
    <!-- 数据库驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.6</version>
    </dependency>
</dependencies>

2编写DAO层类UserDao用于模拟与数据库的交互

ipackage com.henu.dao;

public interface UserDao {
    void login();
}

package com.henu.dao;

/**
 * @author George
 * @description
 **/
public class UserDaoImpl implements UserDao {
    @Override
    public void login() {
        System.out.println("UserDao:login()");
    }
}

(3)编写Service层LoginService 类

package com.henu.service;

import com.henu.dao.UserDao;

public interface UserService {
    void login();
}

package com.henu.service;

import com.henu.dao.UserDao;

/**
 * @author George
 * @description
 **/
public class UserServiceImpl implements UserService {

//注入dao
    private UserDao userDao;

@Override
    public void login() {
        System.out.println("UserService:login()");
        userDao.login();
    }

public UserDao getUserDao() {
        return userDao;
    }

public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
}

  1. 编写控制器

package com.henu.controller;

import com.henu.service.UserService;

/**
 * @author George
 * @description
 **/
public class UserController {

private UserService userService;

public String login(){
        System.out.println("UserController:login()");
        userService.login();
        return "login";
    }

public UserService getUserService() {
        return userService;
    }

public void setUserService(UserService userService) {
        this.userService = userService;
    }
}

(5)编写SpringConfig类(配置类)

package com.henu.config;

import com.henu.controller.UserController;
import com.henu.dao.UserDao;
import com.henu.dao.UserDaoImpl;
import com.henu.service.UserService;
import com.henu.service.UserServiceImpl;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author George
 * @description 配置类 相当于之前的xml文件
 * @Configuration 等同于springXML配置文件;使用Java代码可以检查类型安全。
 * @Bean:用@Bean标注方法等价于XML中配置的bean
 **/
@Configuration
public class SpringConfig {

@Bean
    public UserDao getUserDaoBean(){
        UserDao userDao = new UserDaoImpl();
        return userDao;
    }

@Bean
    public UserService getUserServiceBean(){
        UserService userService = new UserServiceImpl();
        //userDao注入service
        ((UserServiceImpl) userService).setUserDao(getUserDaoBean());
        return userService;
    }

@Bean
    public UserController getUserControllerBean(){
        UserController userController = new UserController();
        userController.setUserService(getUserServiceBean());
        return userController;
    }

}

(6)编写测试方法用于启动Spring容器

package com.henu;

import com.henu.config.SpringConfig;
import com.henu.controller.UserController;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * @author George
 * @description
 **/
public class App {
    public static void main(String[] args) {
        // 加载配置类(等同于以前加载applicationContext.xml)
        AnnotationConfigApplicationContext context =
                new AnnotationConfigApplicationContext(SpringConfig.class);
        // ioc容器中获取控制器对象
        UserController userController = context.getBean(UserController.class);
        // 调用控制器方法
        userController.login();
    }
}

(7)小结

从以上的示例中可以看出,使用Java代码就完美的替代xml配置文件,并且结构更加的清晰。

【补充】或者使用@Repository,@Service,@Controller

SpringConfig不用写方法,在类上加上
@Configuration
@ComponentScan(basePackages = "com.henu")

运行APP即可。

Spring的Java配置相关推荐

  1. Spring的Java配置方式

    Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置. 1     @Configuration 和 @Bean Spring的Java配置方式是通过 @Configuration ...

  2. SpringBoot_02 Spring的Java配置方式

    1.   Spring的Java配置方式 Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置. 1.1. @Configuration 和 @Bean Spring的Java配置方 ...

  3. 常用注解[spring 的 java 配置] ||springboot 热部署

    常用注解[spring 的 java 配置] 回顾学过的 spring 的注解 @Controller @RestController @Service @Repository @Component ...

  4. SSM框架笔记09:初探Spring——采用Java配置方式

    初探Spring--采用Java配置方式   在上一讲的项目基础上继续.   1.在javaconfig包里创建杀龙任务类SlayDragonQuest package net.hw.spring.c ...

  5. java取消 验证_使用Spring Security Java配置时禁用基本身份验证

    我正在尝试使用Spring Security Java配置保护Web应用程序的安全. 这是配置的样子: @Configuration @EnableWebMvcSecurity public clas ...

  6. Spring 基于Java配置

    到目前为止,您已经了解了如何配置使用XML配置文件的Spring bean.如果习惯使用XML配置,那么会说,这不是真的需要学习如何进行基于Java的配置,因为你要使用的配置或者可达到相同的结果. 基 ...

  7. spring之java配置(springboot推荐的配置方式)

    java配置概述 java配置各个注解的作用 /*** 该类是一个配置类,它的作用和bean.xml是一样的* spring中的新注解* Configuration* 作用:指定当前类是一个配置类* ...

  8. spring 框架-java配置163邮件服务器,发送邮件

    java配置163邮件服务器,发送邮件 首先保证spring框架包的正确导入 1.利用spring的邮件服务 进行配置邮件服务器 再导入:javax.mail.jar这是邮件服务的插件实现 sprin ...

  9. Spring框架学习笔记04:初探Spring——采用Java配置类管理Bean

    文章目录 一.课程引入 二.采用Java配置类管理Bean (一)打开项目[SpringDemo2021] (二)创建net.hw.spring.lesson04包 (三)创建杀龙任务类 (四)创建勇 ...

最新文章

  1. pandas新字段(数据列)生成、使用np.where或者apply lambda函数结合if else生成新的字段,详解及实战
  2. MS SQL 排序规则总结
  3. Python之每个人都应该知道的30个一行代码程序
  4. MapReduce-Combiner规约-原理分析
  5. SAP CRM产品主数据明细页面无法打开的调试步骤
  6. java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory
  7. CSS每日学习笔记(3)
  8. 第八节:实战前必须掌握的10个指令(下)
  9. java 运行war_javaweb项目在Eclipse中启动Tomcat后运行正常,但是打成war包启动后运行异常的问题?...
  10. 【Flink】Flink kafka producer 分区策略 (flink写入数据不均匀 与 数据写入 分区无数据 )
  11. js的事件循环机制,同步和异步,以及宏任务与微任务的执行顺序
  12. is not a registered tag library. Must be one of:
  13. 数据提取软件----GetData
  14. MP2669GR-锂电池充电管理芯片
  15. 基于simulink的微电网虚拟同步发电机vsg控制系统仿真
  16. 细数魔兽争霸作弊工具排行
  17. 崩坏3水晶计算 关于日期的计算篇 上
  18. 开源php官方团队解散,php语言大厦将倾?
  19. Mysql数据库设计
  20. 终于等到了!十位Java架构师整理的“阿里P7”养成计划

热门文章

  1. CodeForces - 681D Gifts by the List(思维)
  2. 机器学习-降维之主成分分析PCA算法原理及实战
  3. fibonacci数列的性质(ZOJ3707)
  4. CAsyncSocket及CSocket的区别和用法
  5. VC6.0蕉HOOK_timeGetTime 达到变速效果
  6. Nginx 反向代理、动静分离、负载均衡及配置实例
  7. 爬虫:Charles证书设置为系统信任证书(root)
  8. python中的单继承,多继承和mro顺序
  9. Idea单测执行报错“Command line is too long“ 解决办法
  10. Raft当初为什么会被命名为Raft?