一:IOC(控制反转):它是由spring容器进行对象的创建和依赖注入,程序员使用时直接取出即可

正转:例如:

Student stu=new Student();

stu.setname("tom");

stu.setAge(20);

在正转中,由程序员自觉来创建对象,给对象注入值。

反转:由spring容器来自动创建对象。在spring.xml文件中如下:

<bean id="stu" class="com.ztb.dao.Student">
<property name="name" value="tom"></property>
<property name="age" value="20"></property>
</bean>
标签解释:id指的是创建的对象的名字,class表示要创建的对象在哪个包中的哪个类
property name表示成员变量的名字,value表示给成员变量赋值
给创建的对象赋值的两种方法:

A:使用setter方法注入:

注入分为简单类型注入和引用类型注入:

简单类型注入值使用value属性

引用类型注入值使用ref属性

注意:使用setter注入必须要有set方法和无参构造方法。

简单类型注入:

<bean id="school" class="com.ztb.pojo.School">
<property name="name" value="海淀大学"></property>
<property name="address" value="海定区"></property>
</bean>

引用类型注入:

有两个类School和Student,其中Student类中有school的对象:

private String name;
private String age;
private School school;

则引用注入如下:
<bean id="stu" class="com.ztb.pojo.Student">
<property name="name" value="zhangsan"></property>
<property name="age" value="20"></property>
<property name="school" ref="school"></property>
</bean>

<bean id="school" class="com.ztb.pojo.School">
<property name="name" value="海淀大学"></property>
<property name="address" value="海定区"></property>
</bean>

B:使用构造方法注入:

 a:使用构造方法的参数名称进行注入值:

<bean id="school" class="com.ztb.pojo.School">
<constructor-arg name="name" value="海鼎"></constructor-arg>
<constructor-arg name="address" value="海鼎"></constructor-arg>
</bean>

b:使用构造方法参数的下标注入值:

<bean id="student" class="com.ztb.pojo.Student">
<constructor-arg index="0" value="zhangsan"></constructor-arg>
<constructor-arg index="1" value="20"></constructor-arg>
<constructor-arg index="2" ref="school"></constructor-arg>
</bean>

c:使用默认的构造方法的参数的顺序注入值:

<bean id="student1" class="com.ztb.pojo.Student">
<constructor-arg value="zhangsan"></constructor-arg>
<constructor-arg value="20"></constructor-arg>
<constructor-arg ref="school"></constructor-arg>
</bean>

 注意:使用构造方法注入必须要有有参构造方法

二:项目案例:使用三层架构进行用户的插入操作:界面层,业务逻辑层,数据访问层

1非spring接管的三层项目构建:

实体类:User

数据访问层:接口UserMapper,实现类UserMapperImpl

业务逻辑层:接口UserService,实现类UserServiceImpl

  实现类中一定要有UserMapper对象,并且接口一定要指向实现类,UserMapper usermapper=new UserMapperImpl;

界面层:实现类UserController

  实现类中一定要有UserServicer对象,并且接口一定要指向实现类,UserService userservice=new UserServiceImpl;

2:spring接管的三层项目构建:

实体类:

private Integer uid;
private String uname;
private String uage;

数据访问层:

public class UserMapperImpl implements UserMapper{

public int insert(User user) {
System.out.println(user.getUname()+"插入成功");
return 1;
}
}

业务逻辑层:

private UserMapper userMapper;


public void setUserMapper(UserMapper userMapper) {
this.userMapper = userMapper;
}

public int insert(User user) {

return userMapper.insert(user);
}

界面层:

 private UserService userService;
public void setUserService(UserService userService) {
this.userService = userService;
}
public int insert(User user){
return userService.insert(user);
}

Spring整合:

<bean id="usermapper" class="com.ztb.dao.UserMapperImpl"></bean>
<bean id="userservice" class="com.ztb.service.UserServiceImpl">
<property name="userMapper" ref="usermapper"></property>
</bean>
<bean id="usercontroller" class="com.ztb.controller.UserController">
<property name="userService" ref="userservice"></property>
</bean>

测试:

 ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserController usercontroller = (UserController) context.getBean("usercontroller");
usercontroller.insert(new User(1,"张三","3"));

spring接管的三层项目构建(使用注解):

实体类:

private Integer uid;
private String uname;
private String uage;

数据访问层:

@Repository
public class UserMapperImpl implements UserMapper{

public int insert(User user) {
System.out.println(user.getUname()+"插入成功");
return 1;
}
}

业务逻辑层:

@Service
public class UserServiceImpl implements UserService{
@Autowired
private UserMapper userMapper;

public int insert(User user) {

return userMapper.insert(user);
}
}

界面层:

@Controller
public class UserController {
@Autowired
private UserService userService;

public int insert(User user){
return userService.insert(user);
}

Spring扫描包:

<context:component-scan base-package="com.ztb"></context:component-scan>

测试:

 ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserController usercontroller = (UserController) context.getBean("userController");//因为默认是驼峰命名
usercontroller.insert(new User(1,"张三","3"));

三:基于注解的IOC,也称依赖注入

a:创建对象的注解:

@Component:可以创建任意对象,创建的对象默认名称是类名的驼峰命名法,也可以指定对象的名称

@Component
public class School {
@Value("海鼎")
private String name;
@Value("海定区")
private String address;

@Controller:专门用来创建控制器的对象(Servlet),这种对象可以接收用户的请求。可以返回处理结果给客户端

@Service:专门用来创建业务逻辑层的对象,负责向下访问数据访问层,处理完毕后的结果返回给界面层

@Repository:专门用来创建数据访问层的对象,负责数据库中的增删改查

注意:使用注解的IOC,需要在spring.xml文件中配置扫描包:

<context:component-scan base-package="com.ztb.pojo"></context:component-scan>

b:依赖注入的注解

值类型的注入:

@Value:用来给简单类型注入值:

@Component 创建的对象名默认为school
public class School {
@Value("海鼎")
private String name;
@Value("海定区")
private String address;

引用类型的注入:

1@Autowired:使用类型注入值,从整个Bean工厂中搜索同源类型的对象进行注入

同源类型:

a:被注入的类型(Student中的school)与注入的类型是完全相同的类型

@Component
public class Student {
@Value("张三")
private String name;
@Value("20")
private String age;
@Autowired
private School school;


@Component 创建的对象名默认为school
public class School {
@Value("海鼎")
private String name;
@Value("海定区")
private String address;

b:被注入的类型(Student中的school父)与注入的类型是父子类类型

public class Student {
@Value("张三")
private String name;
@Value("20")
private String age;
@Autowired
private School school;


@Component("school1")
public class School {
@Value("海鼎")
private String name;
@Value("海定区")
private String address;


@Component("school")
public class SubSchool extends School{
@Value("小海地")
private String name;
@Value("小海底")
private String address;

c:被注入的类型(Student中的school接口)与注入的类型是接口与实现类的类型

注意:在有父子类的情况下,使用按类型注入,就意味着有多个可注入的对象,此时按照名称进行二次筛选,选中与被注入对象相同名称的对象进行注入

2:@Autowired+@Qualifier:使用名称注入值,从整个Bean工厂中搜索相同名称的对象进行注入

a:被注入的类型(Student中的school)与注入的类型是完全相同的类型

@Component("school1")
public class School {
@Value("海鼎")
private String name;
@Value("海定区")
private String address;


@Component
public class Student {
@Value("张三")
private String name;
@Value("20")
private String age;
@Autowired
@Qualifier("school1")
private School school;

b:被注入的类型(Student中的school父)与注入的类型是父子类类型

@Component
public class Student {
@Value("张三")
private String name;
@Value("20")
private String age;
@Autowired
@Qualifier("school1")
private School school;


@Component("school1")
public class School {
@Value("海鼎")
private String name;
@Value("海定区")
private String address;




@Component("school")
public class SubSchool extends School{
@Value("小海地")
private String name;
@Value("小海底")
private String address;

四:为应用指定多个Spring配置文件:

1:

 2:三层架构改造:

 在total.xml中:

<import resource="applicationContext_*.xml"></import>汇总

标签智能推荐:

spring jar包解读(转)

的单个jar包。但是不包括mock.jar,aspects.jar,spring-portlet.jar,andspring-hibernate2.jar。spring-src.zip就是所有的源代码压缩包。除了spring.jar文件,Spring还包括有其它21个独立的jar包,各自包含着对应的Spring组件,用户可以根据自己的需要来选择组合自己的jar包,而不必引入整个spring.jar

每日总结

20220626今天,开始了javaweb主流框架中的spring的学习,在查阅了spring框架的学习路线后,我打算以spring----&gt;springMVC----&gt;MyBatis-----&gt;springboot的顺序来学习。今天的到目前为止进行了spring的简单的了解,了解了spring的发展过程,简单的入门,spring的知识框图等。明天会继续spring的学习。&nb

Spring简单快速学习

Spring程序开发步骤①导入Spring开发的基本包坐标②编写Dao接口和实现类③创建Spring核心配置文件④在Spring配置文件中配置UserDaoImpl⑤使用Spring的API获得Bean实例一、导入Spring开发的基本包坐标&nbsp;二、编写Dao接口和实现类&nbsp;三、创建Spring核心配置文件&nbsp;四、在Spring配置文件中配置UserDaoImpl&nbsp

Spring简介

OP轻松应对。声明式事务的支持(核心)通过Spring的声明式事务灵活地进行事务管理,提高开发效率和质量。方便的程序测试可以用非容器依赖的编程方式进行几乎所有的测试工作方便集成各种优秀框架Spring不排斥各种优秀框架,并提供对各种优秀框架(如Struts、Hibernate、Hessian、Quartz等)的支持支持降低JavaEEAPI的使用难度Spring为很多难用的JavaEEAPI(如J

java中间件、数据库与spring框架,高级Java开发面试解答

pring核心类,并说明有什么作用?5.介绍一下Spring的事务的了解?6.介绍一下Spring的事务实现方式?7.解释AOP模块8.Spring的通知类型有哪些,请简单介绍一下?9.Spring通知类型使用场景分别有哪些?10.请介绍一下你对SpringBeans的理解?11.Spring有哪些优点?12.在Spring中使用hibernate的方法步骤13.Spring和Struts的区别?

K8S+Docker理论与实践深度集成,Java面试算法整理

pring核心类,并说明有什么作用?5.介绍一下Spring的事务的了解?6.介绍一下Spring的事务实现方式?7.解释AOP模块8.Spring的通知类型有哪些,请简单介绍一下?9.Spring通知类型使用场景分别有哪些?10.请介绍一下你对SpringBeans的理解?11.Spring有哪些优点?12.在Spring中使用hibernate的方法步骤13.Spring和Struts的区别?

sxt_(001_003)_spring_ioc

一、spring简介&nbsp;Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。Spring是一个开源框架,它由

互联网大厂Java面试题集—Spring boot面试题(一)

用里面的依赖包,你可以一站式集成Spring及其他技术,而不需要到处找示例代码和依赖包。如你想使用SpringJPA访问数据库,只要加入spring-boot-starter-data-jpa启动器依赖就能使用了。Starters包含了许多项目中需要用到的依赖,它们能快速持续的运行,都是一系列得到支持的管理传递性依赖。Starters命名?SpringBoot官方的启动器都是以spring-boo

spring是什么

spring框架_百度百科(baidu.com)Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。

Java EE框架

这里所说的各种框架,MVC框架都是说的后端,不是前端。SSH:Struts、Spring、Hibernate,其中Struts为表示层,Spring为业务层,Hibernate为持久层;表示层负责与浏览器交互,持久层对JDBC做了一个轻量级封装,使得操作数据库更加简单。其中Struts由于内存和安全的问题已经过时,SSH使用Spring主要是用IoC容器,方便管理对象,减少对象耦合。Spring推