Spring Di学习(适合新人)

本文深入解析Spring框架中的依赖注入(DI)概念,介绍其主要作用,并详细阐述通过构造函数、set方法、p标签、自动装配及注解等方式实现对象赋值的过程。适合初学者理解Spring DI的工作原理。

最近有人私信我说,我写的博客有些肤浅,没有深究,在此我统一回复一下,这些博客大多都是概念性东西,是用通俗的例子让你理解这个技术或者知识到底是怎么一样原理。
所以我在后面都加着适合新人,我们都是从新人走过来的,知道初学者的那种迷茫,只会代码,不懂原理和含义,就比如,注解,你不去学习理解,初学者根本就不知道那是个什么东西,为什么要使用注解。
如果是资深大牛,那就不要看了,还是那句话,适合新人。
————————————————

1,Spring Di 是什么?主要作用是什么;

Di (依赖注入):简单理解就是赋值的。

2,依赖注入,给对象赋值的几种方式;

2.1 通过构造函数

之前写了一片ioc的文章,那里面用的都是构造函数注入;
SpringIOC学习(适合新人)

2.2 通过set方法的属性注入

创建一个dao层类
package dao;

public class UserDao {
	public void add(){
		System.out.println("这是数据访问层... ...");
	}

}

创建一个service层类

package service;

import dao.UserDao;

public class UserService {
	
	private UserDao userDao;
	
	public void add(){
		System.out.println("这是业务逻辑层... ...");
		userDao.add();
	}

	
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}

}

编写bean

<!-- set注入 -->
        <bean id="userDao" class="dao.UserDao"></bean>
       <bean id="userService" class="service.UserService">
        <property name="userDao" ref="userDao"></property>
       </bean>

测试代码:

public static void main(String[] args) {
			//1.先加载Spring容器
			ClassPathXmlApplicationContext Context = new ClassPathXmlApplicationContext("Spring003.xml");
			//根据bean的id,查找对象
			UserService bean1 = (UserService) Context.getBean("userService");
			bean1.add();
		}

2.3 p标签

其他的与set注入一莫一样,只有bean的格式不同

<!-- p标签注入-->
<bean id="userService2" class="service.UserService" p:userDao-ref="userDao">
       </bean>

2.4 自动装配

这个你知道有这个玩意就行了,这玩意用不到;

2.5 注解

在公司用的最多的就是注解饭方式

dao层

package com.aaa.dao;

import org.springframework.stereotype.Repository;


@Repository
public class UserDao {
	public void add(){
		System.out.println("这是数据访问层... ...");
	}

}

service层

package com.aaa.service;

import javax.annotation.Resource;


import org.springframework.stereotype.Service;

import com.aaa.dao.UserDao;


@Service
public class UserService {
	@Resource
	private UserDao userDao;
	
	public void add(){
		System.out.println("这是业务逻辑层... ...");
		userDao.add();
	}

	
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}

}

bean

<?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:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.1.xsd">
       <context:component-scan base-package="com.aaa"></context:component-scan>
</beans>

测试 :

<?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:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.1.xsd">
       <context:component-scan base-package="com.aaa"></context:component-scan>
</beans>

这样 还有一点,如果注释注入 与 xml注入发生了冲突,也就是你使用了xml方法注入,也使用了注解方法注入,那么就是发生了冲突。
在代码中,优先识别 xml注入,当在xml注入中找到后,注解就无效了。

同样的,关于面试,面试官问的最多的就是 @Resource与@Autowired的区别
另外一篇文章:java中注解@Resource与@Autowired的区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值