Spring IoC 实例
2017-08-07 14:44
176 查看
方式一:配置文件实现Bean实例化和依赖注入
BaseDao.java
package com.demo.spring; public interface BaseDao { public void insert(); public void delete(); public void update(); public void select(); }
ObjectUserFactory.java
package com.demo.spring; public class ObjectUserFactory { public UserDao getUserDao() { return new UserDao(); } }
StaticUserFactory.java
package com.demo.spring; public class StaticUserFactory { public static UserDao getUserDao() { return new UserDao(); } }
UserDao.java
package com.demo.spring; public class UserDao implements BaseDao { @Override public void insert() { System.out.println("insert()"); } @Override public void delete() { System.out.println("delete()"); } @Override public void update() { System.out.println("update()"); } @Override public void select() { System.out.println("select()"); } }
UserService.java
package com.demo.spring; public class UserService { private UserDao userDao; public UserService() { super(); } public UserService(UserDao userDao) { super(); this.userDao = userDao; } public UserDao getUserDao() { return userDao; } public void setUserDao(UserDao userDao) { this.userDao = userDao; } }
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"> <!-- 无参构造实例化配置 --> <bean id="userDao" class="com.demo.spring.UserDao"></bean> <!-- 静态工厂实例化配置 --> <bean id="userDaoByStatic" class="com.demo.spring.StaticUserFactory" factory-method="getUserDao"></bean> <!-- 动态工厂实例化配置 --> <bean id="objectUserFactory" class="com.demo.spring.ObjectUserFactory"></bean> <bean id="userDaoByObject" factory-bean="objectUserFactory" factory-method="getUserDao"></bean> <!-- 构造器注入 --> <bean id="userServiceByContructor" class="com.demo.spring.UserService"> <constructor-arg name="userDao" ref="userDao"></constructor-arg> </bean> <!-- Setter注入, 必须有无参构造 --> <bean id="userServiceBySetter" class="com.demo.spring.UserService"> <property name="userDao" ref="userDao"></property> </bean> </beans>
UserDaoTest.java
package com.demo.test; import org.junit.Before; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.demo.spring.BaseDao; import com.demo.spring.UserDao; public class UserDaoTest { 12111 public ApplicationContext context; @Before public void init() { context = new ClassPathXmlApplicationContext("applicationContext.xml"); } @Test public void test1() { System.out.println("--------------无参构造实例化-----------------"); BaseDao userDao = context.getBean("userDao", BaseDao.class); // 无参构造实例化 userDao.insert(); BaseDao userDao1 = context.getBean("userDao", UserDao.class); userDao1.delete(); UserDao userDao2 = context.getBean("userDao", UserDao.class); userDao2.update(); } @Test public void test2() { System.out.println("--------------静态工厂实例化-----------------"); BaseDao userDao = context.getBean("userDaoByStatic", BaseDao.class);// 静态工厂实例化 userDao.insert(); BaseDao userDao1 = context.getBean("userDaoByStatic", UserDao.class);// 静态工厂实例化 userDao1.delete(); UserDao userDao2 = context.getBean("userDaoByStatic", UserDao.class);// 静态工厂实例化 userDao2.update(); } @Test public void test3() { System.out.println("--------------动态工厂实例化-----------------"); BaseDao userDao = context.getBean("userDaoByObject", BaseDao.class);// 动态工厂实例化 userDao.insert(); BaseDao userDao1 = context.getBean("userDaoByObject", UserDao.class);// 动态工厂实例化 userDao1.delete(); UserDao userDao2 = context.getBean("userDaoByObject", UserDao.class);// 动态工厂实例化 userDao2.update(); } }
UserServiceTest.java
package com.demo.test; import org.junit.Before; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.demo.spring.UserService; public class UserServiceTest { public ApplicationContext context; @Before public void init() { context = new ClassPathXmlApplicationContext("applicationContext.xml"); } @Test public void test() {// 构造器注入 UserService userService = context.getBean("userServiceByContructor", UserService.class); userService.getUserDao().insert(); } @Test public void test2() {// setter注入,必须有无参构造 UserService userService = context.getBean("userServiceBySetter", UserService.class); userService.getUserDao().delete(); } }
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.demo</groupId> <artifactId>maven-spring</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <!-- junit单元测试 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!-- spring核心包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.0.RELEASE</version> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.5.1</version> <configuration> <source>1.7</source> <target>1.7</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>3.0.1</version> <executions> <execution> <id>attach-sources</id> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
配置文件方式代码源码
方式二:注解方式实现Bean实例化和依赖注入
BaseDao.java
package com.demo.spring; public interface BaseDao { public void insert(); public void delete(); public void update(); public void select(); }
UserDao.java
package com.demo.spring; import org.springframework.stereotype.Repository; @Repository public class UserDao implements BaseDao { @Override public void insert() { System.out.println("insert()"); } @Override public void delete() { System.out.println("delete()"); } @Override public void update() { System.out.println("update()"); } @Override public void select() { System.out.println("select()"); } }
UserService.java
package com.demo.spring; import javax.annotation.Resource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class UserService { // @Resource // 写在字段前面,可以没有setter方法,默认名称优先 @Autowired // 写在字段前面,可以没有setter方法,默认类型优先 private UserDao userDao; public UserDao getUserDao() { return userDao; } }
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"> <context:component-scan base-package="com.demo.spring"></context:component-scan> </beans>
UserDaoTest.java
package com.demo.test; import org.junit.Before; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.demo.spring.BaseDao; import com.demo.spring.UserDao; public class UserDaoTest { public ApplicationContext context; @Before public void init() { context = new ClassPathXmlApplicationContext("applicationContext.xml"); } @Test public void test1() { System.out.println("--------------无参构造实例化-----------------"); BaseDao userDao = context.getBean("userDao", BaseDao.class); // 无参构造实例化 userDao.insert(); BaseDao userDao1 = context.getBean("userDao", UserDao.class); userDao1.delete(); UserDao userDao2 = context.getBean("userDao", UserDao.class); userDao2.update(); } }
UserServiceTest.java
package com.demo.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 com.demo.spring.UserService; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath*:applicationContext.xml" }) public class UserServiceTest { @Autowired private UserService userService; @Test public void test() { userService.getUserDao().insert(); } }
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.demo</groupId> <artifactId>maven-spring</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <!-- junit单元测试 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>4.2.0.RELEASE</version> <scope>test</scope> </dependency> <!-- spring核心包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.2.0.RELEASE</version> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.5.1</version> <configuration> <source>1.7</source> <target>1.7</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>3.0.1</version> <executions> <execution> <id>attach-sources</id> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
注解方式代码源码
相关文章推荐
- Spring学习笔记IOC与AOP实例
- Spring的DI和IoC实例详解
- Spring的Ioc简单使用实例(含XML配置文件路径知识)
- (2) spring核心概念IOC/DI实例分析
- Spring IOC容器bean实例化
- Spring的DI和IoC实例详解
- Spring.Net Ioc 实例
- Spring中IoC的入门实例
- Spring学习总结(二)---谈谈对Spring IOC的理解(二:代码实现实例)
- Spring(三)IoC的简介和实例分析
- Spring中IoC的入门实例
- Spring中IoC的入门实例
- 实例化Spring IoC容器
- Spring的IoC实例
- 【Spring】——IOC配置对象实例
- Spring入门(一)——从工厂实例中感知spring的IOC
- springIoC实例
- Spring中的IOC(三):bean 的其他属性及bean实例的生命周期和范围
- Spring容器实例Bean的三种方法(IOC三种方法)
- SpringMVC系列(十五)Spring MVC与Spring整合时实例被创建两次的解决方案以及Spring 的 IOC 容器和 SpringMVC 的 IOC 容器的关系