Spring

Spring = Bean Oriented Programming

DI/AOPを参照。

Spring Boot = Spring Framework + Embedded HTTP Servers - XML Configuration

SPRING INITIALIZR https://start.spring.io/

Spring Framework概要(図:他サイトを参照)

Spring + Hibernateのサンプル

logic-beans.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:util="http://www.springframework.org/schema/util"

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/util

http://www.springframework.org/schema/util/spring-util.xsd">

<import resource="./DataSource.xml"/>

<import resource="./Hibernate.xml"/>

<context:component-scan base-package="org.xxx.demo" />

</beans>

DataSource.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"

xsi:schemaLocation=

"http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd">

<!-- 方法1 -->

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

<property name="location">

<value>classpath:jdbc.properties</value>

</property>

</bean>

<bean id="dataSource"

class="org.springframework.jdbc.datasource.DriverManagerDataSource">

<!-- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> -->

<property name="driverClassName" value="${jdbc.driverClassName}" />

<property name="url" value="${jdbc.url}" />

<property name="username" value="${jdbc.username}" />

<property name="password" value="${jdbc.password}" />

...

</bean>

<!-- 方法2 -->

<bean id="dataSource"

class="org.springframework.jdbc.datasource.DriverManagerDataSource">

<!-- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> -->

<property name="driverClassName" value="com.mysql.jdbc.Driver"/>

<property name="url" value="jdbc:mysql://localhost:3306/spring"/>

<property name="username" value="root"/>

<property name="password" value="root"/>

...

</bean>

</beans>

Hibernate.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"

xsi:schemaLocation=

"http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd">

●方式1:Annotation

<bean id="sessionFactory"

class="org.springframework.orm.

hibernate3.annotation.AnnotationSessionFactoryBean">

<property name="dataSource" ref="dataSoure"/>

<property name="hibernateProperties">

<props>

<prop key="hibernate.dialect">

org.hibernate.dialect.MySQLDialect

</prop>

<prop key="hibernate.show_sql">true</prop>

<prop key="hibernate.format_sql">true</prop>

</props>

</property>

★書き方1

<property name="annotatedClasses">

<list>

<value>org.xxx.demo.model.xxx</value>

<value>org.xxx.demo.model.yyy</value>

</list>

</property>

★書き方2

<property name="packagesToScan">

<list>

<value>org.xxx.demo.model</value>

</list>

</property>

</bean>

●方式2:XML

<bean id="sessionFactory"

class="org.springframework.orm.

hibernate3.LocalSessionFactoryBean">

<property name="dataSource" ref="dataSoure"/>

<property name="hibernateProperties">

<props>

<prop key="hibernate.dialect">

org.hibernate.dialect.MySQLDialect

</prop>

<prop key="hibernate.show_sql">true</prop>

<prop key="hibernate.format_sql">true</prop>

</props>

</property>

<property name="mappingResources">

<list>

<value>xxx.hbm.xml</value>

</list>

</property>

</bean>

</beans>

コアモジュール

・Core Utilに相当

・Context Bean間の関係

・Beans

★Beanモジュール

org.springframework.beans

Beanの定義

Beanの作成 BeanFactory, DefaultListableBeanFactory

Beanの解析

★Contextモジュール

org.springframework.context

重要なインターフェース:ApplicationContext

★Coreモジュール

重要なインターフェース:Resource

jdbc.properties

jdbc.driverClassName=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/spring

jdbc.username=root

jdbc.password=root

#初期時の接続数

initialSize=10

#最大遊休の接続数

maxIdle=20

#最小遊休の接続数

minIdle=5

#最大接続数

maxActive=50

#接続時にタイムアウトログをプリント可否

logAbandoned=true

#タイムアウトした接続を回収可否

removeAbandoned=true

#タイムアウト時間(単位:秒)

removeAbandonedTimeout=180

#タイムアウト時に待つ時間(単位:ミリ秒)

maxWait=1000

@Component("userDaoImpl")

public class UserDaoImpl implements UserDao {

private DataSource dataSource;

public DataSource getDataSource() {

return dataSource;

}

@Resource(name="dataSource")

public void setDataSource(DataSource dataSource) {

this.dataSource = dataSource;

}

@Override

public void save(User u) {

try {

Connection conn = dataSource.getConnection();

conn.createStatement()

.executeUpdate("insert into user values ('aaa','bbb')");

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

★pom.xmlの設定

<properties>

<org.springframework.version>XXX</org.springframework.version>

</properties>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-core</artifactId>

<version>${org.springframework.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-expression</artifactId>

<version>${org.springframework.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-beans</artifactId>

<version>${org.springframework.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-aop</artifactId>

<version>${org.springframework.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-context</artifactId>

<version>${org.springframework.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-context-support</artifactId>

<version>${org.springframework.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-tx</artifactId>

<version>${org.springframework.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-jdbc</artifactId>

<version>${org.springframework.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-orm</artifactId>

<version>${org.springframework.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-oxm</artifactId>

<version>${org.springframework.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-web</artifactId>

<version>${org.springframework.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-webmvc</artifactId>

<version>${org.springframework.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-webmvc-portlet</artifactId>

<version>${org.springframework.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-test</artifactId>

<version>${org.springframework.version}</version>

</dependency>