-
目的作用
希望可以通过记录一下自己一个基于IDEA的SpringMVC+Spring+Mybatis完整项目的代码框架,里边的代码实现了从界面操作数据对数据库实现了基本的语句,给自己留一个备份给需要里边相关代码段的同学们一个参考。关于这个项目的代码也会放在码云上,同时里边代码的逻辑、几个框架之间的关系也会通过另一篇的博客做详细的介绍。后边会给出相对应的连接。
配置文件以及下边的代码部分大家不必要一个个的看,根据自己的需要可以粘贴自己需要的代码以及配置文件;对于有需要的同学也可以把这里的文件完全复制到自己的对应的文件目录可以形成一个小的demo
-
目录介绍
为了更加详细的描述目录的结构和里边主要文件的代码,这里给出大家一张通过画图工具自己制作出来的图,里边着重的介绍了一些代码编写过程中我们用到的文件:
-
环境中的配置文件
pom.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.jlst</groupId>
<artifactId>testSystemTest01</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>testSystemTest01 Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<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>
<!--用于jar包依赖的版本锁定-->
<spring.version>5.0.2.RELEASE</spring.version>
<slf4j.version>1.6.6</slf4j.version>
<log4j.version>1.2.12</log4j.version>
<mysql.version>5.1.6</mysql.version>
<mybatis.version>3.4.5</mybatis.version>
</properties>
<dependencies>
<!--这是AOP相关的技术;AspectJ是一个基于Java语言的AOP框架,Spring2.0以后新增了对AspectJ切点表达式支持
@AspectJ是AspectJ1.5新增功能,通过JDK5注解技术,允许直接在Bean类中定义切面;新版本Spring框架,建议使用
AspectJ方式来开发AOP;使用AspectJ需要导入Spring AOP和AspectJ相关Jar包(Spring基本jar包也需要);
AOP: Aspect Oriented Programming 面向切面编程,利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑
各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率;主要的功能是:日志记录,性能统计,安全
控制,事务处理,异常处理等等。 主要的意图是:将日志记录,性能统计,安全控制,事务处理,异常处理等代码
从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改 变
这些行为的时候不影响业务逻辑的代码。 -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.8</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<!--Spring容器相关的jar包依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!--SpringMVC相关的jar包依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!--项目开发中单元测是的jar包依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>compile</scope>
</dependency>
<!--Spring中事务处理所的jar包依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<!--Jdbc模板技术的jar包依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<!--MySQL驱动的jar包依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!--servlet jar包依赖-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<!--jsp技术jar包依赖,用于动态网页展示-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<!--jstl技术jar包依赖,用于在界面写el表达式以及jltl代码-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!--log4j日志jar包依赖-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!--Mybatis框架jar包依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!--Spring框架与Mybatis框架整合的jar包依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<!--C3p0数据库连接jar包依赖-->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<finalName>testSystemTest01</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
<!--<resources>-->
<!--<resource>-->
<!--<directory>src/main/java</directory>-->
<!--<includes>-->
<!--<include>**/*.xml</include>-->
<!--</includes>-->
<!--<filtering>true</filtering>-->
<!--</resource>-->
<!--</resources>-->
</build>
</project>
web.xml:
<!--<!DOCTYPE web-app PUBLIC-->
<!--"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"-->
<!--"http://java.sun.com/dtd/web-app_2_3.dtd" >-->
<web-app>
<display-name>Archetype Created Web Application</display-name>
<!--配置Spring的监听器,默认只是加载WEB-INF目录下applicationContext.xml配置文件-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--设置配置文件的路径-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!--配置前端控制器-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--加载SpringMVC.xml的配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<!--启动服务器,创建servlet-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--配置解决中文乱码的过滤器-->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
applicationContext.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"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!--以上<beans>中的为项目约束,如果约束缺少的话代码运行的过程会中报错-->
<!--开启注解扫描,要骚免得是service和dao层的注解,要忽略web层注解,因为web层是让SpringMVC框架去管理-->
<context:component-scan base-package="cn.jlst">
<!--配置要忽略的注解-->
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
<!--expression中要用的是全类名,全类名可以通过搜索的方式找到相应的类然后右击Copy全类名-->
</context:component-scan>
<!--Spring整合MyBatis对象-->
<!--配置连接池-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<!--<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/dafsas"/>-->
<property name="jdbcUrl" value="jdbc:mysql://自己服务器的IP地址:3306/dafsas"/>
<property name="user" value="数据库用户登录名"/>
<property name="password" value="用户访问密码"/>
</bean>
<!--配置SqlSessionFactory工厂 -->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--配置User接口所在包-->
<bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="cn.jlst.dao"/>
</bean>
<!--配置Spring框架声明事务管理-->
<!--配置事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--配置事务通知-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="find*" read-only="true"/>
<tx:method name="*" isolation="DEFAULT"/>
</tx:attributes>
</tx:advice>
<!--配置AOP增强-->
<aop:config>
<aop:advisor advice-ref="txAdvice" pointcut="execution(* cn.jlst.service.*Servicelmpl.*(..))"/>
</aop:config>
</beans>
log4j.properties:
### 设置###
log4j.rootLogger = debug,stdout,D,E
### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
### 输出DEBUG 级别以上的日志到=E://logs/error.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = E://logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
### 输出ERROR 级别以上的日志到=E://logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =E://logs/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
Springmvc.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--开启注解扫描,在这里是MVC的web层,所以是只是扫描web层的内容-->
<context:component-scan base-package="cn.jlst.controller">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!--配置视图解析器对象-->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--配置静态资源过滤-->
<mvc:resources mapping="/css/**" location="/css/"/>
<mvc:resources mapping="/js/**" location="/js/"/>
<mvc:resources mapping="/images/**" location="/images/"/>
<!--开启SpringMVC注解支持-->
<mvc:annotation-driven/>
</beans>
SqlMapconfig.xml配置文件:
如果要是Mybatis的框架不采用注解的方式来进行SQL语句匹配那么就需要改文件,该文件的目录在resources下,对于该文件的引用这里可以参考test包中的测试类(整合之后改文件中的核心环境配置内容就放到了applicationContext.xml的文件中,这个文件取消),这里贴出供需要的朋友参考:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/dafsas"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<package name="cn.jlst.dao"/>
</mappers>
</configuration>
-
代码部分:
UserController:
package cn.jlst.controller;
import cn.jlst.dao.UserDao;
import cn.jlst.domain.User;
import cn.jlst.service.UserService;
import cn.jlst.utils.UserUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
/**
* @Author:柳梦磊
* @Date:2019/9/1019:50
* @Aphorism:喜欢蓝天和白云也喜欢蓝天白云下大笑的自己
* @Function:
*/
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@Autowired
private UserDao userdao;
@Autowired
private UserUtils userutils;
// 这是一个查找的样例
@RequestMapping("/findall")
public String findAll(Model model){
System.out.println("这里是表现层中查询账户的所有信息");
List<User> list = userService.findAll();
model.addAttribute("list",list);
userutils.helloUser();
return "success";
/**
* description:findAll方法是调用了service层的发法,但是实际的开发中如果返回的数据不需要逻辑上的处理则可以通过web(
* controll)中的方法可以直接调用dao层中的方法
* function:用于查询,并向页面返回查询到的数据
* @Param: model是SpringMVC 中封装的一个方法,用来向全段界面传递函数,这里大家只需要套用即可
* @return java.lang.String这里返回的是跳转界面的文件名称,当通过RequestMapping中的路径访问时顺利执行完方法体重的
* 代码后就可以通过return跳转到相对应的页面,所跳转的界面的默认路径以及文件的类型是在配置文件中配置的,此项目的默
* 认路径是/WEB-INF/pages/默认的类型是.jsp
*/
}
// 这是一个添加的样例
@RequestMapping("/saveuser")
public void save(User user, HttpServletResponse response, HttpServletRequest request) throws IOException {
System.out.println("这里是对用户的信息进行查询的方法");
userService.saveUser(user);
response.sendRedirect(request.getContextPath()+"/user/findall");
/**
* description:/save表示的是访问的路径,@RequestMapping是一个SpringMVC中的修饰符
* function:这个方法主要是用来添加用户
* @Param: user表示的是一个实体类,与数据库表中的相对应
* @Param: response是servlet中原生的参数,通过在参数中取出;在这里主要是用来重定向
* @Param: request是servlet中原生的参数,通过在参数中取出;在这里主要是用来重定向
* @return void
*/
}
// 这是一个这是一个用来删除例子
@RequestMapping("/delectuser")
public String dalectUser(User user){
System.out.println("这是删除用户的方法");
userdao.delectUser(user);
return "success";
/**
* description:这里演示的只是一个基本的删除方法如果要是需要用到批量删除的功能自己查阅有关Mybatis中基于这个框架
* 下的批量删除功能;我们这个方法演示的是直接调用dao层的方法,跳过了中间的service层
* function:根据用户的姓名来删除用户的记录
* @Param: user用来通过实体传送消息,相对应的实体存在于domain包下
* @return java.lang.String
*/
}
// 这是一个有关过更新的例子
@RequestMapping("updateuser")
public String updateUser(User user){
userdao.updateUser(user);
return "success";
/**
* description:这里这里虽然可以实现基本的修改,但是对于如果输入的ID不存在等异常情况没有主处理,这里我们可以通过
* 我们的service层中相应的方法做一个对应的处理
* function:用来根据用户的ID名字修改用户地name中的内容
* @Param: user用来通过实体传送消息,相对应的实体存在于domain包下
* @return java.lang.String
*/
}
}
UserDao:
package cn.jlst.dao;
import cn.jlst.domain.User;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @Author:柳梦磊
* @Date:2019/9/1019:43
* @Aphorism:喜欢蓝天和白云也喜欢蓝天白云下大笑的自己
* @Function:
*/
@Repository
public interface UserDao {
@Select("select * from user")
public List<User> findAll();
@Insert("insert into user(id,name) values(#{id},#{name})")
public void saveUser(User user);
@Delete("delete from user where name=#{name}")
public void delectUser(User user);
@Update("update user set name=#{name} where id=#{id}")
public void updateUser(User user);
}
User:
package cn.jlst.domain;
/**
* @Author:柳梦磊
* @Date:2019/9/1019:42
* @Aphorism:喜欢蓝天和白云也喜欢蓝天白云下大笑的自己
* @Function:
*/
public class User {
private String id;
private String name;
@Override
public String toString() {
return "User{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
'}';
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
UserService:
package cn.jlst.service;
import cn.jlst.dao.UserDao;
import cn.jlst.domain.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @Author:柳梦磊
* @Date:2019/9/1019:48
* @Aphorism:喜欢蓝天和白云也喜欢蓝天白云下大笑的自己
* @Function:
*/
@Service("userService")
public class UserService {
@Autowired
private UserDao userDao;
// @Override
public List<User> findAll() {
System.out.println("这是service层findAll");
return userDao.findAll();
}
// @Override
public void saveUser(User user) {
System.out.println("这是service层saveUser");
userDao.saveUser(user);
}
}
TestMybatis、TestSpring在项目成功之后并没有价值只是在开发的过程中用来测试;按照下边的代码进行测试的时候应该注意把SqlMapConfig.xml中的文件添加到相应的位置
TestMybatis:
package cn.jlst.service;
import cn.jlst.dao.UserDao;
import cn.jlst.domain.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @Author:柳梦磊
* @Date:2019/9/1019:48
* @Aphorism:喜欢蓝天和白云也喜欢蓝天白云下大笑的自己
* @Function:
*/
@Service("userService")
public class UserService {
@Autowired
private UserDao userDao;
// @Override
public List<User> findAll() {
System.out.println("这是service层findAll");
return userDao.findAll();
}
// @Override
public void saveUser(User user) {
System.out.println("这是service层saveUser");
userDao.saveUser(user);
}
}
TestSpring:
package cn.jlst.test;
import cn.jlst.service.UserService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* @Author:柳梦磊
* @Date:2019/9/1020:12
* @Aphorism:喜欢蓝天和白云也喜欢蓝天白云下大笑的自己
* @Function:
*/
public class TestSpring {
@Test
public void run1(){
// 加载配置文件
ApplicationContext ac=new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
// 获取对象
UserService as= (UserService) ac.getBean("userService");
// 调用方法
as.findAll();
}
}
UserUtils:
这里的代码是测试utils中的类是否可以完成自动依赖注入
package cn.jlst.utils;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Component;
/**
* @Author:柳梦磊
* @mailbox:838196425@qq.com
* @BlogAddress;https://blog.csdn.net/lmlzww/
* @Date:2019/9/1514:17
* @Aphorism:喜欢蓝天和白云也喜欢蓝天白云下大笑的自己
* @Function:工具类的注入测试
* @Note:Component是用来注入的,使用了Component环境会自动的创建一个对应的对象,则其他的类就可以通过相应的注解
* 进行引入使用
*/
@Component
public class UserUtils {
public void helloUser(){
System.out.println("这里是一个用来测试utils包中类注册是否成功的方法"+"----------------------------------");
}
}