Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【尚筹网】二、环境搭建一

【尚筹网】二、环境搭建一

作者头像
用户11332765
发布于 2024-11-26 04:10:23
发布于 2024-11-26 04:10:23
8600
代码可运行
举报
文章被收录于专栏:编程编程
运行总次数:0
代码可运行

环境搭建总体目标

创建工程

系统架构图

工程创建计划

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
atcrowdfunding01-admin-parent
 groupId:com.atguigu.crowd
 artifactId:atcrowdfunding01-admin-parent
 packaging:pom
atcrowdfunding02-admin-webui
 groupId:com.atguigu.crowd
 artifactId:atcrowdfunding02-admin-webui
 packaging:war
atcrowdfunding03-admin-component
 groupId:com.atguigu.crowd
artifactId:atcrowdfunding03-admin-component
 packaging:jar
atcrowdfunding04-admin-entity
 groupId:com.atguigu.crowd
 artifactId:atcrowdfunding04-admin-entity
 packaging:jar
atcrowdfunding05-common-util
 groupId:com.atguigu.crowd
 artifactId:atcrowdfunding05-common-util
 packaging:jar
atcrowdfunding06-common-reverse
 groupId:com.atguigu.crowd
 artifactId:atcrowdfunding06-common-reverse
 packaging:jar

创建空项目

创建对应的 Maven 模块
建立模块间的依赖
  • webui 依赖 component
  • component 依赖 entity
  • component 依赖 util

创建数据库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE DATABASE `project_crowd` CHARACTER SET utf8;
use project_crowd;
drop table if exists t_admin;
create table t_admin
(
    id          int          not null auto_increment, # 主键
    login_acct  varchar(255) not null,                # 登录账号
    user_pswd   char(32)     not null,                # 登录密码
    user_name   varchar(255) not null,                # 昵称
    email       varchar(255) not null,                # 邮件地址
    create_time char(19),                             # 创建时间
    primary key (id)
);

基于 Maven 的 Mybatis 的逆向过程

配置 pom

在 atcrowdfunding06-common-reverse 模块的 pom.xml 中配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependencies>
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis</artifactId>
		<version>3.2.8</version>
	</dependency>
</dependencies>

<build>
	<plugins>
		<plugin>
			<groupId>org.mybatis.generator</groupId>
			<artifactId>mybatis-generator-maven-plugin</artifactId>
			<version>1.3.0</version>

			<dependencies>

				<dependency>
					<groupId>org.mybatis.generator</groupId>
					<artifactId>mybatis-generator-core</artifactId>
					<version>1.3.2</version>
				</dependency>
				<dependency>
					<groupId>com.mchange</groupId>
					<artifactId>c3p0</artifactId>
					<version>0.9.2</version>
				</dependency>

				<dependency>
					<groupId>mysql</groupId>
					<artifactId>mysql-connector-java</artifactId>
					<version>8.0.33</version>
				</dependency>
			</dependencies>
		</plugin>
	</plugins>
</build>

创建 generatorConfig.xml

在 atcrowdfunding06-common-reverse 模块下的 src/main/resources 目录下创建 generatorConfig.xml,用来配置逆向工程

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
	<!--mybatis-generator:generate-->
	<context id="atguiguTables" targetRuntime="MyBatis3">
		<commentGenerator>
			<!--是否去除自动生成的注释true:;false:-->
			<property name="suppressAllComments" value="true"/>
		</commentGenerator>
		<!--数据库连接的信息:驱动类、连接地址、用户名、密码-->
		<jdbcConnection
				driverClass="com.mysql.cj.jdbc.Driver"
				connectionURL="jdbc:mysql://localhost:3306/project_crowd?serverTimezone=Asia/Shanghai"
				userId="root"
				password="123456">
		</jdbcConnection>
		<!--默认false,把JDBCDECIMALNUMERIC类型解析为Integer,为true时把 JDBC DECIMALNUMERIC类型解析为java.math.BigDecimal-->
		<javaTypeResolver>
			<property name="forceBigDecimals" value="false"/>
		</javaTypeResolver>
		<!--targetProject:生成Entity类的路径-->
		<javaModelGenerator targetProject=".\src\main\java"
		                    targetPackage="com.atguigu.crowd.entity">
			<!--enableSubPackages:是否让schema作为包的后缀-->
			<property name="enableSubPackages" value="false"/>
			<!--从数据库返回的值被清理前后的空格-->
			<property name="trimStrings" value="true"/>
		</javaModelGenerator>
		<!--targetProject:XxxMapper.xml映射文件生成的路径-->
		<sqlMapGenerator targetProject=".\src\main\java"
		                 targetPackage="com.atguigu.crowd.mapper">
			<!--enableSubPackages:是否让schema作为包的后缀-->
			<property name="enableSubPackages" value="false"/>
		</sqlMapGenerator>
		<!--targetPackage:Mapper接口生成的位置-->
		<javaClientGenerator type="XMLMAPPER"
		                     targetProject=".\src\main\java"
		                     targetPackage="com.atguigu.crowd.mapper">
			<!--enableSubPackages:是否让schema作为包的后缀-->
			<property name="enableSubPackages" value="false"/>
		</javaClientGenerator>
		<!--数据库表名字和我们的entity类对应的映射指定-->
		<table tableName="t_admin" domainObjectName="Admin"/>
	</context>
</generatorConfiguration>

执行逆向工程操作的 maven 指令

双击即可

将逆向工程生成的资源归位

创建完后给 Admin 添加无参全参构造器,然后给生成的资源归位

父工程依赖管理

版本声明

在 atcrowdfunding01-admin-parent 模块的 pom.xml 中进行版本声明

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<properties>
	<maven.compiler.source>8</maven.compiler.source>
	<maven.compiler.target>8</maven.compiler.target>
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	<!--声明属性,对Spring的版本进行统一管理-->
	<atguigu.spring.version>4.3.20.RELEASE</atguigu.spring.version>
	<!--声明属性,对SpringSecurity的版本进行统一管理-->
	<atguigu.spring.security.version>4.2.10.RELEASE</atguigu.spring.security.version>
</properties>

依赖管理

在 atcrowdfunding01-admin-parent 中进行版本声明后,还需要引入依赖

遇到的问题:若依赖基本全部爆红(没下载 jar 包),可以将 dependencyManagement 删去后再重新加载,等下载完 jar 包后再加回去

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependencyManagement>
	<dependencies>
		<!-- Spring 依赖 -->
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-orm -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-orm</artifactId>
			<version>${atguigu.spring.version}</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${atguigu.spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${atguigu.spring.version}</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjweaver</artifactId>
			<version>1.9.2</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/cglib/cglib -->
		<dependency>
			<groupId>cglib</groupId>
			<artifactId>cglib</artifactId>
			<version>2.2</version>
		</dependency>
		<!-- 数据库依赖 -->
		<!-- MySQL 驱动 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.3</version>
		</dependency>
		<!-- 数据源 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.0.31</version>
		</dependency>
		<!-- MyBatis -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.2.8</version>
		</dependency>
		<!-- MyBatis 与 Spring 整合 -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.2.2</version>
		</dependency>
		<!-- MyBatis 分页插件 -->
		<dependency>
			<groupId>com.github.pagehelper</groupId>
			<artifactId>pagehelper</artifactId>
			<version>4.0.0</version>
		</dependency>
		<!-- 日志 -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.7.7</version>
		</dependency>
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
			<version>1.2.3</version>
		</dependency>
		<!-- 其他日志框架的中间转换包 -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jcl-over-slf4j</artifactId>
			<version>1.7.25</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jul-to-slf4j</artifactId>
			<version>1.7.25</version>
		</dependency>
		<!-- Spring 进行 JSON 数据转换依赖 -->
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-core</artifactId>
			<version>2.9.8</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>2.9.8</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-annotations</artifactId>
			<version>2.9.8</version>
		</dependency>
		<!-- JSTL 标签库 -->
		<dependency>
			<groupId>jstl</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>
		<!-- junit 测试 -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>
		<!-- 引入 Servlet 容器中相关依赖 -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.5</version>
			<scope>provided</scope>
		</dependency>
		<!-- JSP 页面使用的依赖 -->
		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>jsp-api</artifactId>
			<version>2.1.3-b06</version>
			<scope>provided</scope>
		</dependency>
		<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
		<dependency>
			<groupId>com.google.code.gson</groupId>
			<artifactId>gson</artifactId>
			<version>2.8.5</version>
		</dependency>
		<!-- SpringSecurity 对 Web 应用进行权限管理 -->
		<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-web</artifactId>
			<version>4.2.10.RELEASE</version>
		</dependency>
		<!-- SpringSecurity 配置 -->
		<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-config</artifactId>
			<version>4.2.10.RELEASE</version>
		</dependency>
		<!-- SpringSecurity 标签库 -->
		<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-taglibs</artifactId>
			<version>4.2.10.RELEASE</version>
		</dependency>
	</dependencies>
</dependencyManagement>

Spring 整合 MyBatis

思路

具体操作

在子工程中加入搭建环境的所需的具体依赖

在 atcrowdfunding03-admin-component 模块添加依赖

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- Spring依赖 -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-orm -->
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-orm</artifactId>
	<exclusions>
		<exclusion>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
		</exclusion>
	</exclusions>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-webmvc</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
	<groupId>org.aspectj</groupId>
	<artifactId>aspectjweaver</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/cglib/cglib -->
<dependency>
	<groupId>cglib</groupId>
	<artifactId>cglib</artifactId>
</dependency>

<!-- 数据库依赖 -->
<!-- MySQL驱动 -->
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
</dependency>

<!-- 数据源 -->
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>druid</artifactId>
</dependency>

<!-- MyBatis -->
<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis</artifactId>
</dependency>

<!-- MyBatis与Spring整合 -->
<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis-spring</artifactId>
</dependency>

<!-- MyBatis分页插件 -->
<dependency>
	<groupId>com.github.pagehelper</groupId>
	<artifactId>pagehelper</artifactId>
</dependency>

<!-- 日志 -->
<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
	<groupId>ch.qos.logback</groupId>
	<artifactId>logback-classic</artifactId>
</dependency>

<!-- 其他日志框架的中间转换包 -->
<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>jcl-over-slf4j</artifactId>
</dependency>

<!-- Spring进行JSON数据转换依赖 -->
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-core</artifactId>
</dependency>
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-annotations</artifactId>
</dependency>

<!-- JSTL标签库 -->
<dependency>
	<groupId>jstl</groupId>
	<artifactId>jstl</artifactId>
</dependency>

<!-- 引入Servlet容器中相关依赖 -->
<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>servlet-api</artifactId>
	<scope>provided</scope>
</dependency>

<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
	<groupId>com.google.code.gson</groupId>
	<artifactId>gson</artifactId>
</dependency>
创建 jdbc.properties
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
jdbc.user=root
jdbc.password=123456
jdbc.url=jdbc:mysql://localhost:3306/project_crowd?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8
jdbc.driver=com.mysql.cj.jdbc.Driver
创建 mybatis-config.xml
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?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>
</configuration>
创建 spring-persist-mybatis.xml
Spring 配置第一步 配置数据源
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?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.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">
	<!-- 加载外部属性文件 -->
	<context:property-placeholder location="classpath:jdbc.properties" />

	<!-- 配置数据源 -->
	<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
		<property name="driverClassName" value="${jdbc.driver}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.user}" />
		<property name="password" value="${jdbc.password}" />
	</bean>
</beans>
测试能否连接数据库

若控制台输出 connection,则连接成功

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.atguigu.crowd.test;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.sql.Connection;
import java.sql.SQLException;

/**
 * Copyright (C) 2024 - 2024 Jasonakeke, Inc. All Rights Reserved
 *
 * @Desc :
 * @Time : 2024/11/17 17:13
 * @Author : Code_By_Jasonakeke
 * @Email : 2284037977@qq.com
 * @Class : CrowdTest
 * @IDE : IntelliJ IDEA
 */
// 在类上标记必要的注解
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:spring-persist-mybatis.xml"})
public class CrowdTest {

	@Autowired
	private DataSource dataSource;

	@Test
	public void test() throws SQLException {
		Connection connection = dataSource.getConnection();
		System.out.println(connection);
	}
}
Spring 配置第二步 配置 SqlSessionFactoryBean 及 MapperScannerConfigurer
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- 配置 SqlSessionFactoryBean 整合 MyBatis -->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean" >
	<!-- 指定 MyBatis 全局配置文件位置 -->
	<property name="configLocation" value="classpath:mybatis/mybatis-config.xml" />
	<!-- 指定 Mapper.xml 配置文件位置 -->
	<property name="mapperLocations" value="classpath:mybatis/mapper/*Mapper.xml" />
	<!-- 配置数据源  -->
	<property name="dataSource" ref="dataSource" />
</bean>

<!-- 配置 MapperScannerConfigurer 来扫描 Mapper 接口所在的包 -->
<bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
	<property name="basePackage" value="com.atguigu.crowd.mapper" />
</bean>
测试能否插入数据
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.atguigu.crowd.test;

import com.atguigu.crowd.entity.Admin;
import com.atguigu.crowd.mapper.AdminMapper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;


/**
 * Copyright (C) 2024 - 2024 Jasonakeke, Inc. All Rights Reserved
 *
 * @Desc :
 * @Time : 2024/11/17 17:13
 * @Author : Code_By_Jasonakeke
 * @Email : 2284037977@qq.com
 * @Class : CrowdTest
 * @IDE : IntelliJ IDEA
 */
// 在类上标记必要的注解
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:spring-persist-mybatis.xml", "classpath:spring-persist-tx.xml"})
public class CrowdTest {

	@Autowired
	private AdminMapper adminMapper;

	@Test
	public void testInsertAdmin() {
		Admin admin = new Admin(null, "tom", "123456", "汤姆", "tom@atguigu.com", null);
		int count = adminMapper.insert(admin);
		System.out.println("受影响行数:" + count);
	}
}

日志系统

意义

项目日志系统在现代项目管理中扮演着至关重要的角色。它不仅是记录项目进展、问题和解决方案的工具,还是团队协作、决策支持和项目回顾的重要基础。

  1. 记录项目进展
    • 项目日志系统能够实时、详细地记录项目的各个阶段和任务的完成情况。
    • 这有助于团队成员和项目经理了解项目的当前状态,确保所有工作都在预定的时间表和预算内进行。
  2. 跟踪问题和风险
    • 通过日志系统,团队成员可以记录在项目执行过程中遇到的各种问题和风险。
    • 这些问题和风险可以被分类、优先级排序,并关联到具体的任务或阶段,以便进行后续跟踪和解决。
  3. 促进团队协作
    • 项目日志系统通常具有协作功能,如评论、点赞和分享等,这有助于增强团队成员之间的沟通和协作。
    • 团队成员可以实时查看彼此的日志,了解各自的工作进展和遇到的问题,从而更加紧密地合作。
  4. 提供决策支持
    • 项目经理和决策层可以通过日志系统获取项目的全面信息,包括进度、成本、质量和风险等方面。
    • 这些信息为决策提供了有力的数据支持,有助于项目经理做出更加明智的决策。
  5. 便于项目回顾和总结
    • 在项目结束后,项目日志系统可以作为项目回顾和总结的重要参考。
    • 通过查看日志,团队成员可以了解项目的成功经验和不足之处,为未来的项目提供宝贵的经验和教训。
  6. 提高项目透明度
    • 项目日志系统增加了项目的透明度,使得所有相关方都能够清晰地了解项目的进展和状态。
    • 这有助于建立信任,减少误解和冲突,提高项目的整体效率和质量。
  7. 支持持续改进
    • 通过分析项目日志中的数据,团队可以识别出项目中的瓶颈、低效环节和潜在改进点。
    • 这些信息为项目的持续改进提供了有力的支持,有助于团队不断优化项目管理流程和方法。

综上所述,项目日志系统在项目管理中具有不可替代的作用。它不仅能够提高项目的执行效率和质量,还能够促进团队协作和决策支持,为项目的成功提供有力的保障。因此,在项目管理中,建立和维护一个有效的项目日志系统是非常重要的。

具体操作

加入 slf4j + logback

将 atcrowdfunding03-admin-component 模块中之前日志相关的依赖全部删去,然后加入 slf4j+logback 依赖

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
	<groupId>ch.qos.logback</groupId>
	<artifactId>logback-classic</artifactId>
</dependency>
主动打印日志的方法
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Test
public void testLog(){
	// 1.获取 Logger 对象
	Logger logger = LoggerFactory.getLogger(CrowdTest.class);

	// 2.根据不同日志级别,打印不同级别的日志
	logger.debug("这是 DEBUG 级别的日志");
	logger.info("这是 INFO 级别的日志");
	logger.warn("这是 WARN 级别的日志");
	logger.error("这是 ERROR 级别的日志");
}
更换框架的日志系统
  1. 排除 commons-logging
  2. 加入转换包(atcrowdfunding03-admin-component 模块)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>jcl-over-slf4j</artifactId>
</dependency>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-11-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
AOP中的JDK动态代理与CGLIB动态代理:深度解析与实战
这里推荐一篇实用的文章:《Java 读取寄存器数据的实现与应用》,作者:【喵手】。
小马哥学JAVA
2024/11/21
1960
jdk动态代理和cglib动态代理详解
如上图,代理模式可分为动态代理和静态代理,我们比较常用的有动态代理中的jdk动态代理和Cglib代理,像spring框架、hibernate框架中都采用了JDK动态代理,下面将结合代码阐述两种代理模式的使用与区别。
全栈程序员站长
2022/08/29
7090
jdk动态代理和cglib动态代理详解
jdk动态代理和cglb动态代理
静态代理是在编译时就确定了代理类的代码,在程序运行前就已经存在了代理类的class文件。代理类与委托类的关系在编译时就已经确定,因此被称为静态代理。在静态代理中,代理类需要实现与委托类相同的接口或者继承委托类的父类,以便能够对委托类进行代理操作。
一个风轻云淡
2023/10/15
2210
jdk动态代理和cglb动态代理
Java两种动态代理JDK动态代理和CGLIB动态代理[通俗易懂]
代理模式是23种设计模式的一种,他是指一个对象A通过持有另一个对象B,可以具有B同样的行为的模式。为了对外开放协议,B往往实现了一个接口,A也会去实现接口。但是B是“真正”实现类,A则比较“虚”,他借用了B的方法去实现接口的方法。A虽然是“伪军”,但它可以增强B,在调用B的方法前后都做些其他的事情。Spring AOP就是使用了动态代理完成了代码的动态“织入”。
全栈程序员站长
2022/07/02
3610
Java两种动态代理JDK动态代理和CGLIB动态代理[通俗易懂]
cglib实现动态代理_cglib和jdk动态代理
  说到动态代理,开发者们第一时间想到的就是JDK动态代理和cglib动态代理。了解Spring的同学应该知道,Spring AOP功能的底层实现,就是使用的这两种动态代理。
全栈程序员站长
2022/11/03
3280
JDK动态代理、Cglib动态代理及Spring AOP
Java中的JDK动态代理是一种通过反射机制生成代理对象的技术,使得我们能够在运行时动态地创建某个接口的代理类,而无需手动编写实现类。JDK动态代理通常用于横切关注点(如日志、事务管理、安全性等)在方法调用前后进行处理,而不需要修改目标类的源代码。
意疏
2024/12/31
2230
JDK动态代理、Cglib动态代理及Spring AOP
深入解析:Cglib与JDK动态代理的实现原理、区别及性能对比
在Java开发中,动态代理是一种强大的技术,它允许在运行时创建代理对象以添加行为,而无需修改原始类的代码。JDK动态代理和Cglib是两种主要的动态代理实现方式。本文将深入探讨它们的实现原理、区别、劣势以及性能对比。
AI码师
2024/05/29
3K0
深入解析:Cglib与JDK动态代理的实现原理、区别及性能对比
jdk静态代理,jdk动态代理,cglib动态代理
代理是什么呢?举个例子,一个公司是卖摄像头的,但公司不直接跟用户打交道,而是通过代理商跟用户打交道。如果:公司接口中有一个卖产品的方法,那么公司需要实现这个方法,而代理商也必须实现这个方法。如果公司卖多少钱,代理商也卖多少钱,那么代理商就赚不了钱。所以代理商在调用公司的卖方法后,加上自己的利润然后再把产品卖给客户。而客户部直接跟公司打交道,或者客户根本不知道公司的存在,然而客户最终却买到了产品。
互扯程序
2019/07/01
4910
jdk静态代理,jdk动态代理,cglib动态代理
Spring的两种动态代理Jdk与Cglib
java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调InvokeHandler来处理。 而cglib动态代理是利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。 1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP 2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP 3、如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换
全栈程序员站长
2022/08/04
7310
Spring的两种动态代理Jdk与Cglib
Java代理相关:JDK动态代理、CGLIB动态代理
代理(Proxy)是一种设计模式,提供了对目标对象另外的一种访问方式。可以在目标对象实现的基础上,增加额外的功能操作,即扩展目标对象的功能。
lpe234
2020/07/27
4140
Java-CGLib动态代理
我们知道使用JDK创建代理时只能为接口创建代理实例。我们从Proxy的newProxyInstance方法中可以看出
小小工匠
2021/08/16
2510
JDK动态代理和CGLIB字节码增强
Java 在 java.lang.reflect 包中有自己的代理支持,该类(Proxy.java)用于动态生成代理类,只需传入目标接口、目标接口的类加载器以及 InvocationHandler 便可为目标接口生成代理类及代理对象。我们称这个Java技术为:动态代理
JMCui
2019/12/04
7820
探索Java动态代理的奥秘:JDK vs CGLIB
动态代理是一种在 运行时动态生成代理类 的技术,无需手动编写代理类代码。它通过拦截目标方法的调用,实现对核心逻辑的 无侵入式增强(如日志、事务、权限控制等)。
用户7954602
2025/02/04
1330
探索Java动态代理的奥秘:JDK vs CGLIB
cglib动态代理实现原理_jdk cglib 动态代理 区别
我们都知道jdk的动态代理内部调用切面无效的问题,而cglib则不会出现这种情况,这是为什么?cglib就一定不会出现内部调用切面无效的问题吗?cglib针对每一个类只创建了一个代理类吗?为什么cglib的效率要比jdk的动态代理低呢?
全栈程序员站长
2022/11/01
1K0
【面试系列】JDK动态代理和CGLIB静态代理 - Java技术债务
是否在面试过程中经常被问到Spring的代理的问题:比如说几种代理方式?两种代理方式的区别?或者问为什么JDK动态代理只能代理接口?
Java技术债务
2024/06/21
1140
【面试系列】JDK动态代理和CGLIB静态代理 - Java技术债务
你必须会的 JDK 动态代理和 CGLIB 动态代理
我们在阅读一些 Java 框架的源码时,基本上常会看到使用动态代理机制,它可以无感的对既有代码进行方法的增强,使得代码拥有更好的拓展性。通过从静态代理、JDK 动态代理、CGLIB 动态代理来进行本文的分析。
ytao
2020/06/04
5260
你必须会的 JDK 动态代理和 CGLIB 动态代理
Java动态代理(JDK和cglib)
JAVA的动态代理 代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。
java干货
2021/02/19
1650
从根上理解Cglib与JDK动态代理
最近在阅读到了Spring源码对于两种动态代理使用在不同场景下的使用,两种方式各有利弊写一篇文加深自己的认识。文中对于源码的涉及较少,更多的是作者自己的理解和举例,然后通过部分源码验证。
科技新语
2023/03/07
4350
Java动态代理模式jdk和cglib
jdk动态代理模式里面有个拦截器的概念,在jdk中,只要实现了InvocationHandler接口的类就是一个拦截器类 还使用了些反射的相关概念。 拦截器的概念不了解没关系,假如写了个请求到action,经过拦截器,然后才会到action。然后继续有之后的操作。 拦截器就像一个过滤网,一层层的过滤,只要满足一定条件,才能继续向后执行。 拦截器的作用:控制目标对象的目标方法的执行。
JavaEdge
2021/02/22
1590
静态代理与动态代理
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/52025353
DannyHoo
2018/09/13
3450
静态代理与动态代理
推荐阅读
相关推荐
AOP中的JDK动态代理与CGLIB动态代理:深度解析与实战
更多 >
LV.0
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验