Spring框架搭建

来源:互联网 发布:一亿玉碎 知乎 编辑:程序博客网 时间:2024/09/21 06:35

使用普通的java工程或者web工程,需要下载Spring的相关jar包。

使用maven搭建,省去了下载jar包这一步。下面就使用maven来搭建一个Spring项目。

一、

1、在pom.xml文件中添加依赖:

<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.iflytek</groupId><artifactId>mavenspring</artifactId><version>0.0.1-SNAPSHOT</version><dependencies><!-- Spring依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.3.13.RELEASE</version><!-- <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> --></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.3.13.RELEASE</version><scope>runtime</scope></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency></dependencies></project>


2、在resources资源文件夹下创建两个文件:


log4j.properties为日志文件:

log4j.rootCategory=INFO, stdoutlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %t %c{2}:%L - %m%nlog4j.category.org.springframework.beans.factory=DEBUG

applicationContext.xml为Spring的配置文件:在配置文件中完成注入

<?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"><bean id="ud" class="com.iflytek.dao.UserDao"></bean><bean id="us" class="com.iflytek.service.UserService"><property name="userDao" ref="ud"></property></bean></beans>

ref表示注入对象,基本类型用value。

3、代码:

实体类:

package com.iflytek.domain;public class User {private int id;private String name;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}}
dao:

package com.iflytek.dao;import com.iflytek.domain.User;public class UserDao {public User getUserById(int i) {User user = new User();user.setId(10);user.setName("zhangsan");return user;}}
service:

package com.iflytek.service;import com.iflytek.dao.UserDao;public class UserService {private UserDao userDao;public UserDao getUserDao() {return userDao;}public void setUserDao(UserDao userDao) {this.userDao = userDao;}}

测试类:现在就不需要像以前一样去new对象了:

package com.iflytek.test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.iflytek.domain.User;import com.iflytek.service.UserService;public class App {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");//把IOC容器中的us对象取出来UserService service = context.getBean("us", UserService.class);User user = service.getUserDao().getUserById(10);System.out.println(user.getName());}}

二、一中用的是配置文件的方法去注入容器,还有一种是注解的方法(具体见三讲解):下面结合Spring整合hibernate来写一个实例:

1、先在pom.xml文件中添加需要的依赖:

<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.iflytek</groupId><artifactId>mavenspringhibernate</artifactId><version>0.0.1-SNAPSHOT</version><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.3.13.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.3.13.RELEASE</version><scope>runtime</scope></dependency><dependency>    <groupId>org.springframework</groupId>    <artifactId>spring-orm</artifactId>    <version>4.3.13.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>4.3.13.RELEASE</version></dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>4.3.11.Final</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency></dependencies></project>

2、在resorces资源文件夹下创建两个文件:


其中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"    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">       <!-- 支持spring注解 -->     <context:component-scan base-package="com.iflytek"></context:component-scan><!-- hibernate的配置 --><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property><property name="url" value="jdbc:oracle:thin:@172.16.130.35:1521:orcl"></property><property name="username" value="wtyy1"></property><property name="password" value="wtyy1"></property></bean><bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><property name="dataSource" ref="dataSource"></property><property name="packagesToScan" value="com.iflytek.domain"></property><property name="hibernateProperties">            <props>                <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>                <prop key="hibernate.hbm2ddl.auto">create</prop>                <prop key="hibernate.show_sql">true</prop>                <prop key="hibernate.format_sql">true</prop>            </props></property></bean></beans>

3、代码



pojo:

package com.iflytek.domain;import javax.persistence.Entity;import javax.persistence.Id;import javax.persistence.Table;import org.springframework.stereotype.Component;//把user对象创建(默认的名字为:对象的名字小写),然后加入到容器中@Entity@Table(name="t_user")@Componentpublic class User {private int id;private String name;@Idpublic int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}}

dao:

package com.iflytek.dao;import javax.annotation.Resource;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.springframework.stereotype.Repository;import com.iflytek.domain.User;@Repositorypublic class UserDao {@Resourceprivate SessionFactory sessionFactory;@Resourceprivate User user;public void save() {Session session = sessionFactory.openSession();Transaction tx = session.beginTransaction();user.setId(1002);user.setName("测试");session.save(user);tx.commit();session.close();}}
service:

package com.iflytek.service;import javax.annotation.Resource;import org.springframework.stereotype.Service;import com.iflytek.dao.UserDao;@Servicepublic class UserService {@Resourceprivate UserDao userDao;public UserService() {}public UserService(UserDao userDao) {this.userDao = userDao;System.out.println("userservice construct run...");}}

测试类:

package com.iflytek.test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.iflytek.dao.UserDao;public class App {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");UserDao bean = context.getBean(UserDao.class);bean.save();}}

三、spring常用注解说明:

@Service用于标注业务层组件、 @Controller用于标注控制层组件(如struts中的action)@Repository用于标注数据访问组件,即DAO组件。@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。(pojo)@Scope用于指定scope作用域的(用在类上)@Autowired 默认按类型装配,如果我们想使用按名称装配,可以结合@Qualifier注解一起使用。如下:@Autowired @Qualifier("personDaoBean") 存在多个实例配合使用@Resource默认按名称装配,当找不到与名称匹配的bean才会按类型装配。@Resource的装配顺序:(1)、@Resource后面没有任何内容,默认通过name属性去匹配bean,找不到再按type去匹配(2)、指定了name或者type则根据指定的类型去匹配bean(3)、指定了name和type则根据指定的name和type去匹配bean,任何一个不匹配都将报错@Autowired和@Resource两个注解的区别:a.@Resource默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来装配注入; b.@Autowired默认是按照类型装配注入的,如果想按照名称来转配注入,则需要结合@Qualifier一起使用; c.@Resource注解是由JDK提供,而@Autowired是由Spring提供 @Resource的方式;d. @Resource和@Autowired都可以书写标注在字段或者该字段的setter方法之上