Spring入门IOC与DI

Spring 入门IOC与DI

Spring 的概念

是java 分层的se/ee的full-stack(一站式)开源框架,为EE的每一层都提供了解决技术:

Spring 的作用

解耦合、声明式事务、集成junit更方便的进行分层测试…

Spring IOC

IOC即控制反转,底层是通过工厂+反射+配置文件来创建对象,解决耦合问题。是一个容器(map),帮我们管理所有的组件。

Spring 的环境搭建
  1. 导包(6个)

    beans、core、context、expression、commons-logging、log4j

    可以只使用commons-logging,但要使用log4j就必须有commons-logging

  2. 创建一个实体类

  3. 在src下面创建一个配置文件,建议使用applicationContext.xml

    所有约束都抽出来放在一个html文件中/spring-framework-4.2.4.RELEASE/docs/spring-framework-reference/html/xsd-configuration.html

  4. 测试

<!-- 
	bean标签: 指定要实例化的对象
		id属性: 唯一标识 可以为任意值 但是整个xml唯一
		class属性: 类的全限定名 就是通过它反射该类的实例对象
		scope属性: 范围,其取值有
			singleton:单实例(默认值),配置文件加载时,创建该实例对象,使用getBean获取的对象是同一个对象
			prototype:多实例,配置文件加载时不创建对象,使用getBean时创建对象,不是同一个对象
-->
<bean id="user" class="com.edu.domain.User" scope="singleton"></bean>

当用action的时候用多实例,当用servlet、service、dao时用单实例

//通过spring容器获取对象
public void test1() {
	//加载配置文件
	ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
	//通过反射加工厂,获取对象
	User user = (User)context.getBean("user");
	user.say();
}

import标签:导入其他的配置文件

<import resource="..."></import>
Spring 的DI(依赖注入)
  1. 什么是DI

    spring在通过ioc创建这个对象的时候,如果这个对象还有属性,就一并给赋值进去,ID是在IOC的基础上进行对象的属性注入

  2. DI的属性注入方式(构造器注入、set属性注入、其他方式注入)

    构造器属性注入:条件是对象必须要有构造方法

    <bean id="user" class="com.edu.domain.User" scope="singleton">
    	<constructor-arg name="属性名" value="属性值"></constructor-arg>
    </bean>
    <!-- value:只针对基本类型和String的值进行赋值
    	ref:针对对象 
    -->
    

    set属性的方式:条件是对象的属性必须有set方法

    <bean id="car" class="com.edu.serviceImp.CarImp">
    	<property name="name" value="BMW"></property>
    	<property name="price" value="1500000"></property>
    </bean>
    <!--
     	name:要赋值的属性名
    	value:要赋值的值(针对基本类型和String类型)
    	ref:针对对象类型,其值必须是配置文件中bean的id
    -->
    <bean id="person" class="com.edu.serviceImp.PersonImp">
    	<property name="name" value="jack"></property>
    	<property name="car" ref="car"></property>
    </bean>
    
  3. 复杂属性的注入

<!-- 复杂属性的注入 -->
<bean id="coll" class="com.edu.domain.coll">
    <!-- String数组底层是数组 -->
    <property name="ss">
        <list>
            <value>aaa</value>
            <value>bbb</value>
            <value>ccc</value>
        </list>
    </property>
    <!-- list底层也是数组 -->
    <property name="ll">
        <list>
            <value>l1</value>
            <value>l2</value>
            <!-- 对象类型需要使用ref,并且bean的值必须是配置文件中Bean的id -->
            <ref bean="car"/>
        </list>
    </property>
    <!-- map -->
    <property name="mm">
        <map>
            <entry key="k1" value="v1"></entry>
            <entry key="k2" value="v2"></entry>
            <!-- 当value是对象时,需要用value-ref,并且其值必须是配置文件中Bean的id -->
            <entry key="k3" value-ref="person"></entry>
        </map>
    </property>
    <!-- 键值对类型,通常用来替换配置文件 -->
    <property name="pp">
        <props>
            <prop key="hibernate.root">root</prop>
            <prop key="hibernate.password">123</prop>
        </props>
    </property>
</bean>
spring 整合连接池
<!-- 让spring知道外部的数据库连接信息的配置文件 jdbc.properties,需要导入context的约束 -->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- c3p0数据库连接 -->
<bean id="c3p0" class="com.mchange.v2.c3p0.ComboPooledDataSource">
	<property name="driverClass" value="${jdbc.driver}"></property>
	<property name="jdbcUrl" value="${jdbc.url}"></property>
	<property name="user" value="${jdbc.username}"></property>
	<property name="password" value="${jdbc.password}"></property>
</bean>
<!-- dbcp数据库连接 -->
<bean id="dbcp" class="org.apache.commons.dbcp.BasicDataSource">
	<property name="driverClassName" value="${jdbc.driver}"></property>
	<property name="url" value="${jdbc.url}"></property>
	<property name="username" value="${jdbc.username}"></property>
	<property name="password" value="${jdbc.password}"></property>
</bean>
IOC的注解开发步骤
  1. 导包
  2. 开启注解扫描器,告诉spring应该去那个包下面解析注解
  3. 配置注解组件 Component
  4. 测试
@Component("userService")	//定义在类上,注解扫描器一扫描就会创建对象放在spring容器中
//@Scope("singleton")		//声明此类的域,是单实例还是多实例(action需要配置)
public class userServiceImp implements userService {

	@Value("userService")
	private String name;
	@Autowired	//当spring容器中有多个userDao对象时,可以使用@Qualifier("对象的id")来区分
	//也可以使用@Resource(name="对象的id")代替上面两个注解
	private userDao userDao;
	@Override
	public void save() {
		System.out.println(name+"调用了daoImp的存数据方法!");
		userDao.save();
	}
	
	@PostConstruct 	//在对象初始化之后执行的方法
	public void init() {
		System.out.println("初始化之后执行!!!");
	}
	@PreDestroy		//在对象销毁之前执行的方法
	public void destroy() {
		System.out.println("销毁之后执行!!!");
	}
	
}
Spring 整合 junit
  1. 导包

    spring-test.jar、spring-aop.jar、junit.jar

  2. 告诉spring配置文件的位置

    @ContextConfiguration(value = “classpath:applicationContext.xml”)

  3. 告诉spring谁加载配置文件

    @RunWith(value=SpringJUnit4ClassRunner.class)

  4. 分层测试

//声明spring配置文件在哪
@ContextConfiguration("classpath:applicationContext.xml")
//声明谁加载配置文件
@RunWith(value=SpringJUnit4ClassRunner.class)	//固定写法
public class SpringJUnitTest {
	
	//当使用SpringJUnit的时候,对象属性不需要写set方法
	@Autowired
	private userService service;
	@Autowired
	private userDao dao;
	
	//可以分层测试
	@Test
	public void Service_save() {
		service.save();
	}
	@Test
	public void Dao_save() {
		dao.save();
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring 是一个开源的 Java 开发框架,可以帮助开发者快速构建企业级应用程序。要快速入门 Spring,可以先学习 Spring 的核心概念,如 IoC、AOP、Bean 等,然后通过实践来深入理解。建议先学习 Spring 的官方文档和教程,同时可以参考一些优秀的 Spring 教程和书籍,如《Spring 实战》、《Spring 揭秘》等。另外,可以通过搭建一个简单的 Spring 项目来加深对 Spring 的理解和应用。 ### 回答2: Spring 是一款流行的开源框架,用于开发Java应用程序。要快速入门Spring,可以按照以下步骤进行: 1. 学习Spring的基础知识:首先,了解Spring框架的概念和优势,明确它可以解决哪些问题和应用场景。学习Spring的基本概念,如控制反转(IoC)和面向方面编程(AOP)。 2. 设置开发环境:安装Java Development Kit(JDK)和集成开发环境(IDE),如Eclipse或IntelliJ。然后,下载Spring框架并导入到开发环境中。 3. 学习Spring的核心模块:重点学习Spring的核心模块,如Spring Core和Spring Context。了解如何配置和管理Spring Bean和依赖注入。 4. 学习Spring的数据访问模块:继续学习Spring的数据访问模块,如Spring JDBC和Spring ORM。了解如何使用Spring简化数据库访问和操作对象关系映射(ORM)。 5. 学习Spring的Web开发模块:学习Spring的Web开发模块,如Spring MVC。了解如何使用Spring MVC构建Web应用程序,并处理请求和响应。 6. 初步实践:使用Spring框架来开发一些简单的应用程序或小项目。这有助于巩固所学的知识,并帮助你理解Spring在实际应用中的用法和特性。 7. 学习Spring周边技术:Spring生态系统非常丰富,还包括许多与之配套的技术和工具。学习与Spring相关的其他技术,如Spring Boot、Spring Security和Spring Cloud等。 8. 参考和实践:查阅Spring官方文档和教程,阅读相关书籍和博客,参加Spring培训或在线课程。通过实践项目和与其他开发者讨论,进一步提高你的Spring技能和应用水平。 通过以上步骤,你可以快速入门Spring,并开始使用它来开发高效、灵活且维护性强的Java应用程序。 ### 回答3: 要快速入门Spring,可以按照以下几个步骤进行: 1. 学习Spring的基本概念:理解Spring的核心概念,如控制反转(IoC)和依赖注入(DI),并了解Spring框架的特点和优势。 2. 配置开发环境:下载并安装Java开发工具(如Eclipse、IntelliJ IDEA等),并配置好Java开发环境。此外,还需要下载Spring框架的jar包,并将其添加到项目的类路径中。 3. 学习Spring的不同模块:Spring框架由多个模块组成,例如Spring Core、Spring MVC和Spring Boot等。在学习的过程中,依次了解每个模块的功能和用法,可以通过查看Spring的官方文档或者参考书籍来加深理解。 4. 实践编码:通过编写简单的示例程序来加深对Spring框架的理解和运用。可以通过教程或者示例代码来学习Spring的基本用法,包括配置文件的编写、Bean的创建和注入、AOP等。 5. 参与社区和讨论组:在Spring的社区中,有很多开发者都在探讨Spring的使用和问题解决。可以参与相关的讨论组或论坛,向其他开发者请教问题,分享自己的经验和学习心得。 6. 持续学习和实践:Spring是一个庞大而复杂的框架,学习它需要一定的时间和耐心。要不断地学习和实践,探索更深入和高级的功能和技术。可以阅读更多的书籍和文章、参加培训班或者学习小组,提升自己在Spring开发中的技术水平。 总之,快速入门Spring需要扎实的基础和坚持不懈的学习态度。通过理论学习和实践编码相结合,可以更好地掌握和应用这个强大的框架。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值