美文网首页
3.Guice轻量级注解Guice简单之美

3.Guice轻量级注解Guice简单之美

作者: 洛神灬殇 | 来源:发表于2022-04-06 17:46 被阅读0次

Guice是谷歌推出的一个轻量级依赖注入框架,帮助我们解决Java项目中的依赖注入问题。如果只想在项目中使用依赖注入,这时候我们可以考虑使用Guice,不需要使用Spring那个庞然大物。本文参考了Guice官方文档,详细信息可以直接查看Guice文档

一、引入依赖

maven配置

<dependency>

<groupId>com.google.inject</groupId>

<artifactId>guice</artifactId>

<version>4.1.0</version>

</dependency>

二、Guice+mybatis项目搭建

下面将以Guice结合mybatis搭建一个简单的项目,更好的去了解。

maven项目目录

image

<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>com.leejlife</groupId>

<artifactId>guice</artifactId>

<version>0.0.1-SNAPSHOT</version>

<name>guice</name>

<url></url>

<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<guice.version>3.0</guice.version>

<mybatis.version>3.2.6</mybatis.version>

<mybatis-guice.version>3.6</mybatis-guice.version>

<mysql-jdbc.version>5.1.38</mysql-jdbc.version>

<mchange.c3p0.version>0.9.2.1</mchange.c3p0.version>

<c3p0.version>0.9.2.1</c3p0.version>

<slf4j.version>1.7.5</slf4j.version>

<logback.version>1.0.13</logback.version>

</properties>

<dependencies>

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>5.1.38</version>

</dependency>

<dependency>

    <groupId>commons-configuration</groupId>

    <artifactId>commons-configuration</artifactId>

    <version>1.5</version>

</dependency>

<dependency>

<groupId>com.google.inject</groupId>

<artifactId>guice</artifactId>

<version>${guice.version}</version>

</dependency>

<dependency>

<groupId>com.google.guiceberry</groupId>

<artifactId>guiceberry</artifactId>

<version>3.3.1</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>com.google.inject.extensions</groupId>

<artifactId>guice-persist</artifactId>

<version>${guice.version}</version>

</dependency>

<dependency>

<groupId>com.google.inject.extensions</groupId>

<artifactId>guice-multibindings</artifactId>

<version>${guice.version}</version>

</dependency>

<dependency>

<groupId>org.mybatis</groupId>

<artifactId>mybatis</artifactId>

<version>${mybatis.version}</version>

</dependency>

<dependency>

<groupId>org.mybatis</groupId>

<artifactId>mybatis-guice</artifactId>

<version>${mybatis-guice.version}</version>

</dependency>

<dependency>

<groupId>com.mchange</groupId>

<artifactId>c3p0</artifactId>

<version>${mchange.c3p0.version}</version>

</dependency>

<dependency>

<groupId>org.apache.commons</groupId>

<artifactId>commons-lang3</artifactId>

<version>3.5</version>

</dependency>

<dependency>

<groupId>ch.qos.logback</groupId>

<artifactId>logback-classic</artifactId>

<version>${logback.version}</version>

</dependency>

<dependency>

<groupId>ch.qos.logback</groupId>

<artifactId>logback-core</artifactId>

<version>${logback.version}</version>

</dependency>

<dependency>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-api</artifactId>

<version>${slf4j.version}</version>

</dependency>

</dependencies>

<build>

<filters>

<filter>../guice/profile-${profiles.active}.properties</filter>

</filters>

<resources>

<resource>

<filtering>true</filtering>

<directory>src/main/resources</directory>

<includes>

<include>*/.properties</include>

<include>*/.xml</include>

</includes>

</resource>

</resources>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-deploy-plugin</artifactId>

<version>2.4</version>

<configuration>

<skip>true</skip>

</configuration>

</plugin>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-shade-plugin</artifactId>

<version>1.5</version>

<executions>

<execution>

<phase>package</phase>

<goals>

<goal>shade</goal>

</goals>

<configuration>

<shadedArtifactAttached>true</shadedArtifactAttached>

<shadedClassifierName>allinone</shadedClassifierName>

<artifactSet>

<includes>

<include>:</include>

</includes>

</artifactSet>

<transformers>

<transformer

implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">

<resource>reference.conf</resource>

</transformer>

<transformer

implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">

<manifestEntries>

<Main-Class>com.leejlife.guice.GuiceServer</Main-Class>

</manifestEntries>

</transformer>

</transformers>

</configuration>

</execution>

</executions>

</plugin>

</plugins>

</build>

<profiles>

<profile>

<id>dev</id>

<properties>

<profiles.active>dev</profiles.active>

</properties>

<activation>

<activeByDefault>true</activeByDefault>

</activation>

</profile>

<profile>

<id>sit</id>

<properties>

<profiles.active>sit</profiles.active>

</properties>

</profile>

<profile>

<id>prod</id>

<properties>

<profiles.active>prod</profiles.active>

</properties>

</profile>

</profiles>

</project>

package com.leejlife.guice.model;

public interface DBMapper {

String selectMaxData();

}

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >

<mapper namespace="com.leejlife.guice.model.DBMapper">

<select id="selectMaxData" resultType="String">

        select max(data) from t_test

</select>

</mapper>

DBModule.java

package com.leejlife.guice.module;

import java.util.Properties;

import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;

import org.mybatis.guice.MyBatisModule;

import org.mybatis.guice.datasource.c3p0.C3p0DataSourceProvider;

import com.google.inject.PrivateModule;

import com.google.inject.name.Names;

import com.leejlife.guice.model.DBMapper;

public class DBModule extends PrivateModule {

@Override

protected void configure() {

this.install(new MyBatisModule() {

    @Override

    protected void initialize() {

        bindDataSourceProviderType(C3p0DataSourceProvider.class);

        bindTransactionFactoryType(JdbcTransactionFactory.class);

        addMapperClass(DBMapper.class);

        Names.bindProperties(binder(),

        createProperties("db.properties"));

    }

});

    expose(DBMapper.class);

}

private Properties createProperties(String configFile) {

Properties result = new Properties();

try {

    result.load(DBModule.class.getClassLoader().getResourceAsStream(configFile));

        return result;

    } catch (Exception e) {

        throw new RuntimeException("can not load " + configFile + " .", e);

    }

}

}

Module.java

package com.leejlife.guice.module;

import com.google.inject.AbstractModule;

import com.google.inject.Scopes;

import com.leejlife.guice.service.ProcessService;

public class Module extends AbstractModule {

@Override

protected void configure() {

    install(new DBModule());

    bind(ProcessService.class).in(Scopes.SINGLETON);

}

}

ProcessService.java使用注解

package com.leejlife.guice.service;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import com.google.inject.Inject;

import com.leejlife.guice.model.DBMapper;

public class ProcessService {

private final static Logger log = LoggerFactory.getLogger(ProcessService.class);

@Inject

private DBMapper dbMapper;

public void process(){

    log.info("mabatis查询出最大Data:"+dbMapper.selectMaxData());

}

}

配置文件

db.properties

mybatis.environment.id = guice

JDBC.driver=${JDBC.driver}

JDBC.url=${JDBC.url}

JDBC.username=${JDBC.username}

JDBC.password=${JDBC.password}

c3p0.maxPoolSize=40

c3p0.minPoolSize=10

c3p0.acquireIncrement=2

c3p0.maxIdleTime=1800

c3p0.idleConnectionTestPeriod=60

c3p0.testConnectionOnCheckout = false

c3p0.testConnectionOnCheckin = true

client will wait 30s to get a connection

c3p0.checkoutTimeout=30000

配置profile-dev.properties,注意配上自己的数据源。这里使用的是mysql

mysql connection

JDBC.driver=com.mysql.jdbc.Driver

JDBC.url=

JDBC.username=

JDBC.password=

c3p0 config

c3p0.maxPoolSize=40

c3p0.minPoolSize=10

c3p0.acquireIncrement=2

c3p0.maxIdleTime=1800

c3p0.idleConnectionTestPeriod=60

c3p0.testConnectionOnCheckout = false

c3p0.testConnectionOnCheckin = true

client will wait 30s to get a connection

c3p0.checkoutTimeout=30000

相关文章

  • 3.Guice轻量级注解Guice简单之美

    Guice[https://github.com/google/guice]是谷歌推出的一个轻量级依赖注入框架,帮...

  • Java Vert.x 集成Guice

    Java Vert.x 集成Guice Guice介绍 Guice是谷歌推出的一个轻量级依赖注入框架,帮助我们解决...

  • Druid(二)——Druid中用到的一些技术

    Guice框架 Guice是Google开发的一个轻量级的DI框架,Guice在2008年获得了软件界的奥斯卡--...

  • shiro注解详解

    Shiro注解支持AspectJ、spring、Google-Guice等,可根据应用进行不同的配置。 相关的注解...

  • Guice

    「Guice」依赖注入框架中的小清新单例情况下轻量级的DI呗。

  • [Guice] 7 Guice Aop

    Guice中的Aop,通常是结合自定义注解实现。 以实现一个日志打印的切面注解为例:1、自定义注解 2、在modu...

  • Guice依赖注入(一)

    本教程主要详细讲解Guice的一些基本注入方式,通过该简单教程让我们可以快速使用Guice进行简单系统化开发,后续...

  • Guice AOP(Matcher)

    本教程主要详细讲解Guice的一些AOP方式,通过该简单教程让我们可以快速使用Guice进行AOP开发,后续我们会...

  • Guice 快速入门

    Guice是谷歌推出的一个轻量级依赖注入框架,帮助我们解决Java项目中的依赖注入问题。如果使用过Spring的话...

  • Guice 集成Redis/Mysql(简易mvc框架Demo)

    最近在针对一个开源A/B Test系统做二次开发,这个系统使用的是google 开源的轻量级依赖注入框架Guice...

网友评论

      本文标题:3.Guice轻量级注解Guice简单之美

      本文链接:https://www.haomeiwen.com/subject/iffdsrtx.html