企业网站模板建立流程,山东进一步优化,wordpress找人,七星彩网站开发Spring Framework Spring的两个核心IOC控制反转IOC容器依赖注入DIIOC容器实现注解管理BeanBean对象定义Bean对象获取 AOP面向切面编程 添加依赖入门案例注解通过Spring创建Java bean对象 xml管理Bean案例main下创建bean.XMl文件 DI依赖注入案例创建Spring配置文件 bean-di.xml … Spring Framework Spring的两个核心IOC控制反转IOC容器依赖注入DIIOC容器实现注解管理BeanBean对象定义Bean对象获取 AOP面向切面编程 添加依赖入门案例注解通过Spring创建Java bean对象 xml管理Bean案例main下创建bean.XMl文件 DI依赖注入案例创建Spring配置文件 bean-di.xml 注解管理Bean案例 Spring的两个核心
IOC控制反转 Inverse of Control的简写为 控制反转指是将对象的创建和管理交由Spring框架来完成而不是由开发人员手动创建和管理 即反转资源获取方向把自己创建资源、向环境索取资源的方式变为环境自动将资源准备好我们享受资源注入
IOC容器 IoC容器是用来实现IoC思想的一个工具或者说技术手段 它能够自动扫描应用程序中的对象将它们实例化并自动注入它们所需要的依赖对象使应用程序的开发人员能够更加专注于业务逻辑的实现而不用关心对象的创建和管理。Spring通过IoC容器来管理所有的Java对象的实例化和初始化控制着对象与对象之间的依赖关系
依赖注入DI
DI Dependency Injection依赖注入依赖注入实现了控制反转的思想是指Spring创建对象的过程中将对象依赖属性通过配置进行注入所以 IoC 是一种控制反转的思想而依赖注入 DI 是对 IoC 的一种具体实现Bean管理指Bean对象的创建以及Bean对象中属性的赋值
IOC容器实现
Spring中的IoC容器就是IoC思想的一个落地产品实现。IoC容器中管理的组件也叫做bean。在创建bean之前首先需要创建IoC容器Spring提供了IoC容器的两种实现方式 BeanFactory 这是IoC容器的基本实现是Spring内部使用的接口面向Spring本身不提供给开发人员使用。 ApplicationContext BeanFactory的子接口提供了更多高级特性面向Spring的使用者几乎所有场合都使用 ApplicationContext而不使用底层的BeanFactory。
ApplicationContext的主要实现类
类型说明AnnotationConfigApplicationContext使用注解方式构建IoC容器ClassPathXmlApplicationContext使用XML配置文件方式构建Spring IoC容器
注解管理Bean
Bean对象定义
在Spring框架规范中所有由spring管理的对象都称之为Bean对象。 Spring提供了以下多个注解这些注解可以直接标注在java类上将它们定义成Spring Bean。
注解说明Component该注解用于描述Spring中的Bean它是一个泛化的概念仅仅标识容器中的一个组件Bean并且可以作用在任何层次例如Service层、Dao层等使用时只需将该注解标注在相应的类上即可。Repository该注解用于数据访问层Dao层的类标识为Spring中的Bean功能与Component相同。Service该注解通常作用在业务层Service层用于将业务层的类标识为Spring中的Bean其功能与Component相同。Controller该注解通常作用在控制层如SpringMVC的Controller用于将控制层的类标识为Spring中的Bean其功能与Component相同。
Bean对象获取
ApplicationContext context new AnnotationConfigApplicationContext(包扫描路径);
User user context.getBean(类名.class);AOP面向切面编程
Aspect Oriented Programming 的简写为 面向切面编程。AOP用来封装多个类的公共行为将那些与业务无关却为业务模块共同调用的逻辑封装起来减少系统的重复代码。
添加依赖
dependencies!-- Maven坐标https://mvnrepository.com/artifact/org.springframework/spring-context --!-- 引入spring context依赖--dependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion5.3.24/version/dependency
/dependencies入门案例
注解
Component 注解描述的类表示此类交给Spring框架管理
package cn.tedu.spring.example;
import org.springframework.stereotype.Component;Component
public class User {public void userRun(){System.out.println(User is do something~~);}
}通过Spring创建Java bean对象
AnnotationConfigApplicationContext扫描这个包中所有带有Component注解的类,并根据这些类创建相应的Spring组件
package cn.tedu.spring.example;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class TestUser {public static void main(String[] args) {ApplicationContext context new AnnotationConfigApplicationContext(cn.tedu.spring.example);User user1 context.getBean(User.class);System.out.println(user1 user1);user1.userRun();}
}xml管理Bean案例
在Spring框架中Bean的配置可以通过 XML 文件来完成。这个文件通常被称为 Spring 配置文件或 Spring XML 文件。
package cn.tedu.spring.example;public class UserXml {private String username;private String password;public void run(){System.out.println(今天天气不错挺风和日丽的~);}
}main下创建bean.XMl文件
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdbean iduserXml classcn.tedu.spring.example.UserXml/bean
/beanspackage cn.tedu.spring.example;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestUserXml {public static void main(String[] args) {ApplicationContext context new ClassPathXmlApplicationContext(bean.xml);UserXml userXml (UserXml)context.getBean(userXml);userXml.run();}
}DI依赖注入案例
package cn.tedu.spring.dibase;public class Book {private String bookName;private String bookAuthor;public void setBookName(String bookName) {this.bookName bookName;}public void setBookAuthor(String bookAuthor) {this.bookAuthor bookAuthor;}Overridepublic String toString() {return Book{ bookName bookName \ , bookAuthor bookAuthor \ };}
}创建Spring配置文件 bean-di.xml
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdbean idbook classcn.tedu.spring.dibase.Bookproperty namebookName value倚天屠龙记 /property namebookAuthor value金庸//bean
/beanspackage cn.tedu.spring.dibase;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestBook {public static void main(String[] args) {ApplicationContext context new ClassPathXmlApplicationContext(bean-di.xml);Book book context.getBean(Book.class);System.out.println(book book);}
}注解管理Bean案例
Value Value注入是将属性值直接注入到bean中主要用于注入一些简单类型的属性如字符串、基本类型等 使用时需要注意属性的类型和格式否则会导致注入失败。Autowired Autowired注入是将对象注入到bean中并且在注入对象时会根据依赖注入容器中 bean的类型 进行匹配。 如果容器中有多个类型匹配的bean存在则会抛出异常。因此Autowired注入常用于注入复杂对象、接口类型的属性或其他bean实例。
package cn.tedu.spring.bean;import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Repository;Repository
public class UserDao {Value(jdbc:mysql://localhost:3306/tedu)private String dbUrl;Value(root)private String username;private String password;Value(qwertyuiop)public void setPassword(String password) {this.password password;}Overridepublic String toString() {return UserDao{ dbUrl dbUrl \ , username username \ , password password \ };}
}package cn.tedu.spring.bean;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;Service
public class UserService {Value(注册业务)private String serveName;Autowiredprivate UserDao userDao;Overridepublic String toString() {return UserService{ serveName serveName \ , userDao userDao };}
}package cn.tedu.spring.bean;import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class TestUserDao {Testpublic void testBean(){ApplicationContext context new AnnotationConfigApplicationContext(cn.tedu.spring.bean);UserDao userDao context.getBean(UserDao.class);System.out.println(userDao userDao);}public static void main(String[] args) {ApplicationContext context new AnnotationConfigApplicationContext(cn.tedu.spring.bean);UserService userService context.getBean(UserService.class);System.out.println(userService: userService);}
}