最近有人私信我说,我写的博客有些肤浅,没有深究,在此我统一回复一下,这些博客大多都是概念性东西,是用通俗的例子让你理解这个技术或者知识到底是怎么一样原理。
所以我在后面都加着适合新人,我们都是从新人走过来的,知道初学者的那种迷茫,只会代码,不懂原理和含义,就比如,注解,你不去学习理解,初学者根本就不知道那是个什么东西,为什么要使用注解。
如果是资深大牛,那就不要看了,还是那句话,适合新人。
————————————————
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的区别
本文深入解析Spring框架中的依赖注入(DI)概念,介绍其主要作用,并详细阐述通过构造函数、set方法、p标签、自动装配及注解等方式实现对象赋值的过程。适合初学者理解Spring DI的工作原理。
985

被折叠的 条评论
为什么被折叠?



