springboot02

目录

一、IOC|DI

二、DI注入两种方式

2.1配置文件注入

setter方法注入

有参构造注入

p命名空间注入

2.2注解注入

2.2.1@Value

2.2.2@Autowired

2.2.3@Autowired+@Qualifier 

2.2.4@Autowired 和 @Resource的区别?

1. 来源不同

2. 默认注入方式不同

2.3创建对象相关注解

2.4依赖注入相关注解

三、服务器

3.1完整应用 客户端-服务端

3.2B/S架构 browser / Server

3.3C/S 架构 client/Server

3.4硬件服务器

3.6Tomcat服务器

 面试题

1、DI依赖注入有哪些方式?

2、DI依赖注入常用的注解有哪些?

3、IOC创建对象相关的注解有哪些?


一、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、浏览器访问

http://localhost:8080/

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 + @ResponseBodyREST API
@Service标记为业务逻辑层Service 层  业务层
@Repository标记为数据访问层(DAO)数据库操作  持久层
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值