使用java方式装配Bean

    首先创建一个项目

    然后是项目名

下图:

  

创建完项目先配置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>com.csw.ssm</groupId>
    <artifactId>SpringBean</artifactId>
    <version>1.0-SNAPSHOT</version>

    <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.version>5.1.0.RELEASE</spring.version>
    </properties>

    <dependencies>
    <!-- Spring Web MVC -->
    <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>

    <!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator -->
    <dependency>
        <groupId>org.hibernate.validator</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>6.0.13.Final</version>
    </dependency>






    <!-- servlet 系列的支持 -->
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>8.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>

    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper</artifactId>
        <version>5.1.7</version>
    </dependency>

    <!-- Springframework -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.9.1</version>
    </dependency>

    <!-- MyBatis -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.6</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>1.3.2</version>
    </dependency>

    <!-- 数据库驱动以及数据库连接池-->
    <dependency>
        <groupId>org.mariadb.jdbc</groupId>
        <artifactId>mariadb-java-client</artifactId>
        <version>2.3.0</version>
    </dependency>
    <dependency>
        <groupId>com.mchange</groupId>
        <artifactId>c3p0</artifactId>
        <version>0.9.5.2</version>
    </dependency>

    <!-- 日志框架 -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>4.0.0</version>
    </dependency>


    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>4.0.0</version>
    </dependency>

        <!-- 通用工具 -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.7</version>
        </dependency>

        <!-- 单元测试 -->
        <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>test</scope>
        </dependency>

    </dependencies>

    <build>
        <finalName>contact</finalName>

        <plugins>
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.7</version>
                <dependencies>
                    <dependency>
                        <groupId>org.mariadb.jdbc</groupId>
                        <artifactId>mariadb-java-client</artifactId>
                        <version>2.3.0</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>

</project>
View Code

 在resources下配MyBatis文件generatorConfig.xml

<?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>
    <!--jdbc 驱动包,等-->
    <!--<classPathEntry location="/Program Files/IBM/SQLLIB/java/db2java.zip" />-->

    <context id="sss" targetRuntime="MyBatis3Simple">

        <commentGenerator>
            <property name="suppressAllComments" value="true" />
        </commentGenerator>

        <jdbcConnection driverClass="org.mariadb.jdbc.Driver"
                        connectionURL="jdbc:mariadb://localhost/student"
                        userId="root"
                        password="13794709305">
        </jdbcConnection>


        <javaModelGenerator targetPackage="com.csw.entity" targetProject="srcmainjava">
            <property name="trimStrings" value="true" />
        </javaModelGenerator>

        <sqlMapGenerator targetPackage="mapper"  targetProject="srcmain
esources">
        </sqlMapGenerator>

        <javaClientGenerator type="XMLMAPPER" targetPackage="com.csw.dao" targetProject="srcmainjava">
        </javaClientGenerator>

        <table tableName="%">
            <property name="useActualColumnNames" value="true"/>
        </table>

    </context>
</generatorConfiguration>
View Code

配置jdbc.properties.xml

jdbc.driver=org.mariadb.jdbc.Driver
jdbc.url=jdbc:mariadb://localhost:3306/student
jdbc.user=root
jdbc.password=13794709305
jdbc.txType=JDBC
View Code

配置日志文件logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %msg%n
            </Pattern>
        </layout>
    </appender>

    <logger name="com.csw.dao" level="debug" additivity="false">
        <appender-ref ref="STDOUT" />
    </logger>

    <root level="error">
        <appender-ref ref="STDOUT" />
    </root>

</configuration>
View Code

配置mybatis-config.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>


    <settings>
        <!-- 使用jdbc的getGeneratedKeys获取数据库自增主键值 -->
        <setting name="useGeneratedKeys" value="true" />
        <!-- 使用列别名替换列名 默认:true -->
        <setting name="useColumnLabel" value="true" />
        <!-- 开启驼峰命名转换:Table {create_time} -> Entity {createTime} -->
        <setting name="mapUnderscoreToCamelCase" value="true" />
    </settings>

    <!--&lt;!&ndash;定义一些可以复用的变量&ndash;&gt;-->
    <!--<properties resource="jdbc.properties" />-->

    <!--<settings>-->
        <!--<setting name="cacheEnabled" value="true" /> &lt;!&ndash; 开启二级缓存 &ndash;&gt;-->
        <!--<setting name="autoMappingBehavior" value="PARTIAL"/>-->
        <!--<setting name="mapUnderscoreToCamelCase" value="true"/>-->
        <!--<setting name="localCacheScope" value="SESSION" />-->
    <!--</settings>-->

    <!--&lt;!&ndash;设置别名,可以简化在 xml 中的完全限定名的使用&ndash;&gt;-->
    <!--<typeAliases>-->
        <!--<package name="com.csw.entity" /> &lt;!&ndash; 可以跟 @Alias 结合使用 &ndash;&gt;-->
    <!--</typeAliases>-->

    <!--<environments default="prod">-->
        <!--<environment id="prod">-->
            <!--<transactionManager type="JDBC" />-->
            <!--<dataSource type="POOLED">-->
                <!--<property name="driver" value="${driver}"/>-->
                <!--<property name="url" value="${url}"/>-->
                <!--<property name="username" value="${username}"/>-->
                <!--<property name="password" value="${password}"/>-->
            <!--</dataSource>-->
        <!--</environment>-->
    <!--</environments>-->

    <!--<databaseIdProvider type="DB_VENDOR">-->
        <!--<property name="MySQL" value="mysql"/>-->
        <!--<property name="SQL Server" value="sqlserver"/>-->
        <!--<property name="DB2" value="db2"/>-->
        <!--<property name="Oracle" value="oracle" />-->
    <!--</databaseIdProvider>-->

    <!--&lt;!&ndash;指定映射器&ndash;&gt;-->
    <!--&lt;!&ndash;<mappers>&ndash;&gt;-->
        <!--&lt;!&ndash;<mapper resource="mapper/xxx.xml" />&ndash;&gt;-->
    <!--&lt;!&ndash;</mappers>&ndash;&gt;-->

</configuration>
View Code

配置spring-web.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"


       xsi:schemaLocation="http://www.springframework.org/schema/beans "
       xmlns:mvc="http://www.springframework.org/schema/c" xmlns:contxt="http://www.springframework.org/schema/p">


    <!--跨域的配置-->
    <mvc:cors>
        <mvc:mapping path="/xxx"
            allowed-origins="http://localhost:8080"
            allowed-methods="GET,POST"
            allowed-headers="Accept-Charset,Accept,Content-Type"
            allow-credentials="true"
        />
        <mvc:mapping path="/yyy/*"
            allowed-origins="*"
            allowed-methods="*"
            allowed-headers="*"/>
    </mvc:cors>


    <!--&lt;!&ndash;配置验证器&ndash;&gt;-->
       <!--<bean id="myValidator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">-->
        <!--<property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>-->
        <!--<property name="validationMessageSource" ref="messageSource"/>-->
    <!--</bean>-->

    <!--&lt;!&ndash;国际化&ndash;&gt;-->
    <!--<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">-->
        <!--<property name="basename" value="classpath:messagesxx"/>-->
        <!--<property name="defaultEncoding" value="GBK"/>-->
    <!--</bean>-->
    <!--<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">-->
        <!--<property name="defaultLocale"-->
                  <!--value="zh"/> &lt;!&ndash;当通过 Accept-Language 自动确定 Locale 的方式已经满足不了你,那么你需要试试注册一个 LocaleResolver 来制定 Locale 策略&ndash;&gt;-->
    <!--</bean>-->

    <!--&lt;!&ndash;启用注解扫描&ndash;&gt;-->
    <contxt:component-scan base-package="com.csw.controller" />

    <!--&lt;!&ndash;启用mvc的常用注解&ndash;&gt;-->
    <!--<mvc:annotation-driven validator="myValidator" conversion-service="conversionService">-->
        <!--&lt;!&ndash;@ResponseBody 的 UTF-8 编码&ndash;&gt;-->
        <!--<mvc:message-converters register-defaults="true">-->
            <!--<bean class="org.springframework.http.converter.StringHttpMessageConverter">-->
                <!--<constructor-arg value="GBK"/>-->
            <!--</bean>-->
            <!--<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">-->
                <!--<property name="objectMapper">-->
                    <!--<bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">-->
                        <!--<property name="failOnEmptyBeans" value="false"/>-->
                        <!--<property name="dateFormat">-->
                            <!--<bean class="java.text.SimpleDateFormat">-->
                                <!--<constructor-arg value="yyyy 年 MM 月 dd 日 " />-->
                            <!--</bean>-->
                        <!--</property>-->
                    <!--</bean>-->
                <!--</property>-->
                <!--<property name="prettyPrint" value="true" />-->
                <!--<property name="jsonPrefix" value="data: " />-->
            <!--</bean>-->
        <!--</mvc:message-converters>-->
    <!--</mvc:annotation-driven>-->



    <!--将所有的静态资源交还 Servlet 处理-->
    <mvc:default-servlet-handler />


    <!--&lt;!&ndash;配置返回页面&ndash;&gt;-->
    <!--<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">-->
        <!--<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />-->
        <!--<property name="prefix" value="/WEB-INF/jsp/" />-->
        <!--<property name="suffix" value=".jsp" />-->
    <!--</bean>-->

    <!--&lt;!&ndash;配置上传下载&ndash;&gt;-->
    <!--<bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver" />-->


</beans>
View Code

然后在resources里面spring文件夹里配置两个文件

spring-dao.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:tx="http://www.springframework.org/schema/tx" 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/tx http://www.springframework.org/schema/tx/spring-tx.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.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="org.mariadb.jdbc.Driver" />
        <property name="jdbcUrl" value="jdbc:mariadb://localhost:3306/student" />
        <property name="user" value="root" />
        <property name="password" value="13794709305" />

        <property name="maxPoolSize" value="30" />
        <property name="minPoolSize" value="10" />
        <property name="autoCommitOnClose" value="false" />
        <property name="checkoutTimeout" value="10000" />
        <property name="acquireRetryAttempts" value="2" />
    </bean>

    <!--配置 mybatis-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="typeAliasesPackage" value="com.csw.entity" />
        <property name="configLocation" value="classpath:mybatis-config.xml" />
        <property name="mapperLocations" value="classpath:mapper/*.xml" />
    </bean>

    <!--&lt;!&ndash;配置类型转换规则&ndash;&gt;-->
    <!--<bean name="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">-->
        <!--<property name="converters">-->
            <!--<set>-->
                <!--<bean class="com.csw.databinder.MyStringToDateConverter" />-->
            <!--</set>-->
        <!--</property>-->
        <!--<property name="formatters">-->
            <!--<set>-->
                <!--<bean class="com.csw.demo_formatter.PersonAnnotationFormatter" />-->
            <!--</set>-->
        <!--</property>-->
    <!--</bean>-->

    <!--自动注入 Mapper-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
        <property name="basePackage" value="com.csw.dao" />
    </bean>



    <!--配置声明式事务管理-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
    <tx:annotation-driven proxy-target-class="true" />

</beans>
View Code

spring-service.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"
       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">


    <!--启用注解-->
    <context:component-scan base-package="com.csw.dao"/>

    <!-- 启用 aspectj 方式 AOP-->
    <aop:aspectj-autoproxy proxy-target-class="true" />

</beans>
View Code

呃,好吧,有点乱 = =,进入正题吧。。。

实体类Stu

package com.csw.entity;

public class Stu {
    private Integer id;

    private String name;

    private String weixin;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name == null ? null : name.trim();
    }

    public String getWeixin() {
        return weixin;
    }

    public void setWeixin(String weixin) {
        this.weixin = weixin == null ? null : weixin.trim();
    }
}
View Code

定义接口StuService

package com.csw.service;

import com.csw.entity.Stu;
import java.util.List;

public interface StuService {

    List<Stu> getStu();
}

接口实现StuServiceImpl

package com.csw.service.Impl;

import com.csw.dao.StuMapper;
import com.csw.entity.Stu;
import com.csw.service.StuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class StuServiceImpl implements StuService {

    @Autowired
    private StuMapper stuMapper;

    @Override
    public List<Stu> getStu() {
        return stuMapper.selectAll();
    }
}
View Code

然后是java方式配置Bean   SpringConfig

package com.csw.spring.configuration;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

import javax.sql.DataSource;
import java.beans.PropertyVetoException;

@Configuration //通过该注解表明是一个Spring的配置,相当于xml
@ComponentScan("com.csw") //配置扫包
@PropertySource("classpath:jdbc.properties")
public class SpringConfig {

//    @Value("${jdbc.driver}")
//    private String jdbcDriver;
//
//    @Value("${jdbc.url}")
//    private String jdbcUrl;
//
//    @Value("#{jdbc.username}")
//    private String jdbcUsername;
//
//    @Value("#{jdbc.password}")
//    private String jdbcPassword;

    @Bean
    public DataSource dataSource() throws PropertyVetoException {

        ComboPooledDataSource source = new ComboPooledDataSource();


//        source.setDriverClass(jdbcDriver);
//        source.setJdbcUrl(jdbcUrl);
//        source.setUser(jdbcUsername);
//        source.setPassword(jdbcPassword);

        source.setDriverClass("org.mariadb.jdbc.Driver");
        source.setJdbcUrl("jdbc:mariadb://localhost:3306/student");
        source.setUser("root");
        source.setPassword("13794709305");

//        source.setDriverClass("${jdbc.driver}");
//        source.setJdbcUrl("${jdbc.url}");
//        source.setUser("${jdbc.user}");
//        source.setPassword("${jdbc.password}");

        source.setMaxPoolSize(30);
        return  source;
    }

    /*@Bean(name = "sqlSessionFactory") 如果不写就默认方法的名字*/
    @Bean("sqlSessionFactory")
    public SqlSessionFactoryBean sqlSessionFactory() throws PropertyVetoException {
        SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();

        ClassPathResource resource = new ClassPathResource("mapper/StuMapper.xml");
        sqlSessionFactory.setTypeAliasesPackage("com.csw.entity");
        sqlSessionFactory.setMapperLocations(new Resource[]{resource});
        sqlSessionFactory.setConfigLocation(new ClassPathResource("mybatis-config.xml"));
        sqlSessionFactory.setDataSource(this.dataSource());
        return sqlSessionFactory;
    }

    @Bean
    public MapperScannerConfigurer getMapperScannerConfigurer() {
        MapperScannerConfigurer configurer = new MapperScannerConfigurer();
        configurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
        configurer.setBasePackage("com.csw.dao"); //扫描接口
        return configurer;
    }


}

最后是测试Main

package com.csw.test;

import com.csw.entity.Stu;
import com.csw.proxy.p1.Student;
import com.csw.service.Impl.StuServiceImpl;
import com.csw.service.StuService;
import com.csw.spring.configuration.SpringConfig;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Stu_Main {
    public static void main(String[] args) {
        //通过java配置来实例化spring容器
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);

        //在spring容器中获取bean对象
        StuService service = context.getBean(StuService.class);

        //Student student = (Student) service.getStu();
        //调用对象中的方法直接循环遍历取出来
        for (Stu stu : service.getStu()) {
            System.out.println("学号:" + stu.getId() + ",学生名字:" + stu.getName() + ",学生微信:" + stu.getWeixin());
        }

        //销毁该容器
        context.destroy();

    }
}

效果图如下:

  

原文地址:https://www.cnblogs.com/cheng88/p/10137036.html