目录
2.2.4@Autowired 和 @Resource的区别?
一、IOC|DI
IOC 控制反转,强调对象的创建权限转移给spring容器。
DI 依赖注入,对象的属性值依赖容器注入。
二、DI注入两种方式
2.1配置文件注入
setter方法注入
有参构造注入
p命名空间注入
@Getter
@Setter
@ToString
public class User {
private int id;
private String name;
private int age;
public User() {
System.out.println("user 无参构造.......");
}
public User(int id, String name, int age) {
System.out.println("user 有参构造.......");
this.id = id;
this.name = name;
this.age = age;
}
}
<?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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--创建bean对象 -->
<bean id="user" class="com.hl.springboot03.pojo.User">
<!--无参构造-->
<!--setter方法给属性赋值-->
<property name="id" value="1001"></property>
<property name="name" value="admin"></property>
<property name="age" value="1"></property>
</bean>
<bean id="user2" class="com.hl.springboot03.pojo.User">
<!--有参构造-->
<constructor-arg name="id" value="111"></constructor-arg>
<constructor-arg name="name" value="zhangsan"></constructor-arg>
<constructor-arg name="age" value="10"></constructor-arg>
</bean>
<!--p命名空间赋值-->
<bean id="user3"
class="com.hl.springboot03.pojo.User"
p:id="112" p:name="lisi" p:age="12">
</bean>
</beans>
public class TestDI {
@Test
public void testDI(){
//创建容器
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext("applicationContext.xml");
//容器中获取对象
User user = context.getBean("user2", User.class);
System.out.println(user);
}
}
2.2注解注入
2.2.1@Value
@Getter
@Setter
@ToString
@Component
public class User {
//@Value给属性注入值(适用于简单数据类型 8种基本类型和对应的包装类及String类型)
@Value("111")
private int id;
@Value("aaa")
private String name;
@Value("20")
private int age;
public User() {
System.out.println("user 无参构造.......");
}
public User(int id, String name, int age) {
System.out.println("user 有参构造.......");
this.id = id;
this.name = name;
this.age = age;
}
}
2.2.2@Autowired
//接收请求、接收数据,传递数据到业务层、将业务层执行结果返回给前端
//对象名默认为类名,首字母变小写
@Controller
public class UserController {
//依赖注入方式注入值
//对象类型注入
// @Autowired自动注入(自动从spring容器中查找UserService接口的实现类,实现注入)
@Autowired
private UserService userService;
public void login(String username,String password){
userService.login(username,password);
}
}
@Service
public class UserServiceImpl implements UserService{
@Autowired
private UserDaoImpl userDao;
@Override
public void login(String username, String password) {
System.out.println("service.......");
userDao.login(username, password);
}
}
@Repository
public class UserDaoImpl {
@Autowired
private User user;
public void login(String username, String password) {
System.out.println(user);
System.out.println("dao ......");
}
}
2.2.3@Autowired+@Qualifier
@Autowired 自动注入
默认先通过类型查找,当一个接口有多个实现类,再通过名称查找对象
@Qualifier和@Autowired配合使用,用于强制指定通过名称注入
package com.hl.springboot03.web;
import com.hl.springboot03.service.UserService;
import com.hl.springboot03.service.UserServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
//接收请求、接收数据,传递数据到业务层、将业务层执行结果返回给前端
//对象名默认为类名,首字母变小写
@Controller
public class UserController {
//依赖注入方式注入值
//对象类型注入
// @Autowired自动注入(自动从spring容器中查找UserService接口的实现类,实现注入)
/*
@Autowired 自动注入
默认先通过类型查找,当一个接口有多个实现类,再通过名称查找对象
*/
// @Autowired
// private UserService userServiceImpl;
@Autowired
@Qualifier("userServiceImpl") // @Qualifier和@Autowired配合使用,用于强制指定通过名称注入
private UserService userService;
public void login(String username,String password){
userService.login(username,password);
}
}
2.2.4@Autowired 和 @Resource的区别?
1. 来源不同
-
@Autowired
-
属于 Spring 框架(
org.springframework.beans.factory.annotation
)。 -
是 Spring 特有的注解,与其他 Spring 功能深度集成。
-
-
@Resource
-
属于 Java 标准注解(
javax.annotation.Resource
),遵循 JSR-250 规范。 -
不依赖 Spring,但 Spring 对其提供了支持。
-
2. 默认注入方式不同
-
@Autowired
-
默认按 类型(byType) 注入。
-
如果存在多个同类型的 Bean,会尝试按 名称(byName) 匹配(需配合
@Qualifier
指定名称)。 -
示例:
@Autowired @Qualifier("myBean") // 指定 Bean 名称 private MyService myService;
-
-
@Resource
-
默认按 名称(byName) 注入。
-
如果未指定名称,则退化为按类型(byType)注入。
-
示例:
@Resource(name = "myBean") // 显式指定名称 private MyService myService;
-
2.3创建对象相关注解
@Component 类上使用 通用的javabean 通用的 Spring Bean 注解,标记一个类为 Spring 组件
@Bean 方法上使用 ,告诉 Spring 此方法将返回一个由 Spring 容器管理的对象
@Controller
:传统的 Spring MVC 控制器,返回视图名称
@RestController
= @Controller
+ @ResponseBody
,用于 REST API,直接返回数据
@Service 业务层上使用 标记类为业务服务层组件
@Repository 持久层 标记类为数据访问层(DAO)组件
@Component
├── @Controller
│ └── @RestController
├── @Service
└── @Repository
2.4依赖注入相关注解
@Value 用于给简单类型(基本类型、String、字面量)的属性注入值。
@Autowired + @Qualifier 用于对象类型(Bean)的依赖注入。
-
@Autowired
默认按类型(byType)注入,如果匹配到多个 Bean,再按名称(byName)匹配。 -
如果有多个相同类型的 Bean,需要用
@Qualifier
指定 Bean 的名称。
@Resource 用于对象类型的依赖注入,但它是 Java 标准注解(javax.annotation.Resource
),不是 Spring 特有的。
-
默认按名称(byName)注入,如果找不到匹配的名称,再按类型(byType)注入。
-
可以替代
@Autowired
+@Qualifier
,但功能稍弱。
三、服务器
3.1完整应用 客户端-服务端
3.2B/S架构 browser / Server
3.3C/S 架构 client/Server
3.4硬件服务器
公司内部自己购买,然后托管到机房(移动、联通、电信)
云服务器(阿里云、华为云、腾讯云、百度云......)
3.5软件服务器
bs: http://ip:port/服务名 ip:硬件服务器 port:定义到唯一的应用(tomcat、idea、mysql)
web服务器:只能部署静态资源(html、css、js、vue)
nginx (免费、开源)
应用服务器:java程序
常见的服务器软件:
weblogic oracle公司开发的一款大型的服务器软件,收费。
websphere IBM公司开发的一款大型的服务器软件,收费。
JBOSS JBOSS公司开发的大型服务器软件,收费。
tomcat Apache组织开发的一款中小型服务器软件,开源,免费。
3.6Tomcat服务器
1、下载安装包
主页资源上传失败,看到这里的读者上网找找吧。找不到可以私信我,免费分享
2、解压缩之后直接使用(解压缩到非中文目录)
3、认识tomcat服务器目录结构
4、启动、停止tomcat服务器
关闭服务可以命令行输入shutdown.bat 或者 直接关闭tomcat窗口。一旦关闭,无法进行浏览器访问
5、浏览器访问
6、tomcat下部署前端项目
将前端项目放到webapps目录下即可,比如我的
访问时在地址中写入项目名称即可,页面内容不重要,具体看路径
面试题
1、DI依赖注入有哪些方式?
配置文件模式
注解模式
2、DI依赖注入常用的注解有哪些?
注解 | 作用 | 适用场景 |
---|---|---|
@Autowired | 按类型(byType) 自动注入 Bean,可配合 @Qualifier 按名称注入 | Spring 项目 |
@Qualifier | 指定 Bean 名称,解决多个同类型 Bean 冲突 | 配合 @Autowired 使用 |
@Resource | 按名称(byName) 注入 Bean(Java 标准注解) | 替代 @Autowired + @Qualifier |
@Value | 注入简单类型(String、int、配置属性) | 读取配置文件、SpEL 表达式 |
3、IOC创建对象相关的注解有哪些?
注解 | 作用 | 适用场景 |
---|---|---|
@Component | 类。通用注解,标记类为 Spring Bean | 普通组件 |
@Bean | 方法。在配置类中声明一个方法返回的对象由 Spring 容器管理 | 适用于第三方库的组件、需要复杂初始化的对象、无法修改源码的类 |
@Controller | 标记为 MVC 控制器 | Web 层 控制层 |
@RestController | @Controller + @ResponseBody | REST API |
@Service | 标记为业务逻辑层 | Service 层 业务层 |
@Repository | 标记为数据访问层(DAO) | 数据库操作 持久层 |