当前位置: 首页> 房产> 政策 > 杭州app定制开发_程序员接活的平台网站_最近的新闻大事_竞价推广账户托管

杭州app定制开发_程序员接活的平台网站_最近的新闻大事_竞价推广账户托管

时间:2025/7/12 13:32:04来源:https://blog.csdn.net/qq_73595043/article/details/146428024 浏览次数:0次
杭州app定制开发_程序员接活的平台网站_最近的新闻大事_竞价推广账户托管

Spring基础


Spring Framework:Spring技术的基础框架

Springboot:简易开发

Springcloud:微服务的开发


Spring Framework为Spring所有框架中的最基础的项目

1、Core Container:核心容器

(IOC控制反转,DI依赖注入)

2、整合mybatis(Data Access:数据访问,Data Integration:数据集成)

3、Aop:面向切面编程

Aspects:Aop思想进行实现

4、事务应用开发

Web:web开发

Test:单元测试与集成测试


底层核心思想:(解决代码存在的耦合度偏高的问题)

解决:使用对象的时候,不去主动的使用new生成对象,转换为由外部提供对象

一、IoC:控制反转–》解耦合

解释:对象不用自身进行创建,将对象的创建控制权转移外部,这样的思想就是控制反转

“外部”–》IOC容器(负责对于对象进行创建,初始化等一系列的工作,别创建,管理的对象放在对应的IOC容器中统称为**Bean**)

二、DI依赖注入

IoC容器中两个Bean对象需要依赖在一起才能够执行,就需要进行依赖注入的思想

解耦的步骤

1、使用IoC容器管理Bean(IoC)

2、在IoC容器内将所有有依赖关系的Bean对象进行关系绑定(DI)


在这里插入图片描述


IoC具体实现:

管理:Service和Dao

将被管理的对象告诉IoC容器(配置)

如何获取IoC容器(接口)

IoC容器获取之后怎么获取其中的Bean对象(接口方法)

导入相应的配置(pom.xml)


在这里插入图片描述

DI具体实现:

通过ApplicationContext.xml的Spring的配置文件进行相关的配置

通过property标签嵌入到Bean中进行依赖的注入

<!-- 通过property标签 ​ name:相关的值为创建的Dao的对象的名字->private BookDao bookDao; ​ ref:表示引用的Bean的id --> <property name="bookDao" ref="bookDao"/>
在这里插入图片描述


App主方法的实现调用:

//获取applicationContext容器
ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
// 通过配置文件进行调用,获取Bean对象(返回的为Object类型)--》需要强行转换为对象的类型
BookService bookService=(BookService)ac.getBean("bookService");
//调用方法
bookService.save();

Bean对象的基础配置

<bean id="bookDao" name="dao1 dao2" class="com.itheima.dao.impl.BookDaoImpl" scope="prototype"/>

Bean对象配置中的id为Bean对象的唯一标识,name为取别名的意思,scope为这个Bean对象的作用域是否单例(不可重复)


Bean的实例化

1、调用的它的空参的构造方法–》常用方法进行实例

<!--方式一:构造方法实例化bean-->
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>

Spring中的代码异常报错,从下往上一次排除


2、通过一个工厂类中的静态方法进行实例化

<!--方式二:使用静态工厂实例化bean-->
<bean id="orderDao" class="com.itheima.factory.OrderDaoFactory" factory-method="getOrderDao"/>
//静态工厂创建对象
public class OrderDaoFactory {public static OrderDao getOrderDao(){System.out.println("factory setup....");return new OrderDaoImpl();}
}

3、通过实例工厂实例化(不用设为static方法)

//实例工厂创建对象
public class UserDaoFactory {public UserDao getUserDao(){return new UserDaoImpl();}
}
<!--方式三:使用实例工厂实例化bean-->
<bean id="userFactory" class="com.itheima.factory.UserDaoFactory"/><bean id="userDao" factory-method="getUserDao" factory-bean="userFactory"/>

4、通过factoryBean实例化Bean

UseDao.java

public interface UserDao {public void save();
}

UserDaoImpl.java

public class UserDaoImpl implements UserDao {public void save() {System.out.println("user dao save ...");}
}

UserDaoFactoryBean.java(实现FactoryBean<泛型类型:要实现的Bean对象>的接口)

//FactoryBean创建对象
public class UserDaoFactoryBean implements FactoryBean<UserDao> {//代替原始实例工厂中创建对象的方法public UserDao getObject() throws Exception {return new UserDaoImpl();}public Class<?> getObjectType() {return UserDao.class;}}

进行Bean的配置:

<!--方式四:使用FactoryBean实例化bean-->
<bean id="userDao" class="com.itheima.factory.UserDaoFactoryBean"/>

调用执行

ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao = (UserDao) ctx.getBean("userDao");
userDao.save();

Bean的生命周期(init,destroy)

public class BookDaoImpl implements BookDao {public void save() {System.out.println("book dao save ...");}//表示bean初始化对应的操作public void init(){System.out.println("init...");}//表示bean销毁前对应的操作public void destory(){System.out.println("destory...");}}
<!--init-method:设置bean初始化生命周期回调函数-->
<!--destroy-method:设置bean销毁生命周期回调函数,仅适用于单例对象-->
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl" init-method="init" destroy-method="destory"/>

具体实现:

1、创建对象(进行内存分配)

2、执行构造方法

3、执行属性注入(set操作)

4、执行bean初始化方法

5、使用bean(执行相关的业务操作)

6、关闭、销毁容器

7、执行bean销毁方法


依赖注入

根据注入方式分为

1、setter方法进行注入(自己在编写模块的时候推荐使用)

2、构造器进行注入

注入的类型分为有引用类型和简单类型(基本的数据类型和String)


Setter注入:通过标签property

(引用类型参数为name,ref)

(基本类型参数为name,value)

public class BookDaoImpl implements BookDao {private String databaseName;private int connectionNum;//setter注入需要提供要注入对象的set方法public void setConnectionNum(int connectionNum) {this.connectionNum = connectionNum;}//setter注入需要提供要注入对象的set方法public void setDatabaseName(String databaseName) {this.databaseName = databaseName;}public void save() {System.out.println("book dao save ..."+databaseName+","+connectionNum);}
}
public class BookServiceImpl implements BookService{private BookDao bookDao;private UserDao userDao;//setter注入需要提供要注入对象的set方法public void setUserDao(UserDao userDao) {this.userDao = userDao;}//setter注入需要提供要注入对象的set方法public void setBookDao(BookDao bookDao) {this.bookDao = bookDao;}public void save() {System.out.println("book service save ...");bookDao.save();userDao.save();}
}

在bean的配置文件中实现类型注入(简单类型通过value指定值,引用类型通过ref指定绑定的引用类型–》配置的bean对象的id)

普通类型:

property标签:设置注入属性

name属性:设置注入的属性名,实际是set方法对应的名称

value属性:设置注入简单类型数据值

引用类型:

property标签:设置注入属性

name属性:设置注入的属性名,实际是set方法对应的名称

ref属性:设置注入引用类型bean的id或name

<!--注入简单类型-->
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"><!--property标签:设置注入属性--><!--name属性:设置注入的属性名,实际是set方法对应的名称--><!--value属性:设置注入简单类型数据值--><property name="connectionNum" value="100"/><property name="databaseName" value="mysql"/>
</bean><bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/><!--注入引用类型-->
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl"><!--property标签:设置注入属性--><!--name属性:设置注入的属性名,实际是set方法对应的名称--><!--ref属性:设置注入引用类型bean的id或name--><property name="bookDao" ref="bookDao"/><property name="userDao" ref="userDao"/>
</bean>

构造器的注入:使用标签constructor-arg(其中的参数说明任然不变)

(引用类型参数为name,ref)

(基本类型参数为name,value)

public class BookServiceImpl implements BookService{private BookDao bookDao;private UserDao userDao;public BookServiceImpl(BookDao bookDao, UserDao userDao) {this.bookDao = bookDao;this.userDao = userDao;}public void save() {System.out.println("book service save ...");bookDao.save();userDao.save();}
}
public class BookDaoImpl implements BookDao {private String databaseName;private int connectionNum;public BookDaoImpl(String databaseName, int connectionNum) {this.databaseName = databaseName;this.connectionNum = connectionNum;}public void save() {System.out.println("book dao save ..."+databaseName+","+connectionNum);}
}
<!--标准书写<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl">根据构造方法参数名称注入<constructor-arg name="connectionNum" value="10"/><constructor-arg name="databaseName" value="mysql"/></bean><bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/><bean id="bookService" class="com.itheima.service.impl.BookServiceImpl"><constructor-arg name="userDao" ref="userDao"/><constructor-arg name="bookDao" ref="bookDao"/></bean>
-->
<!--解决形参名称的问题,与形参名不耦合<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl">根据构造方法参数类型注入<constructor-arg type="int" value="10"/><constructor-arg type="java.lang.String" value="mysql"/></bean><bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/><bean id="bookService" class="com.itheima.service.impl.BookServiceImpl"><constructor-arg name="userDao" ref="userDao"/><constructor-arg name="bookDao" ref="bookDao"/></bean>--><!--解决参数类型重复问题,使用位置解决参数匹配--><bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"><!--根据构造方法参数位置注入--><constructor-arg index="0" value="mysql"/><constructor-arg index="1" value="100"/></bean><bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/><bean id="bookService" class="com.itheima.service.impl.BookServiceImpl"><constructor-arg name="userDao" ref="userDao"/><constructor-arg name="bookDao" ref="bookDao"/></bean>


bean的自动装配(通过bean标签的属性值,autowire=“”)实现byType通过引用对象类型进行注入

<bean id="bookDao" class="org.example.dao.impl.BookDaoImpl"/>
<bean id="bookService" class="org.example.service.impl.BookServiceImpl" autowire="byType"/>
public class BookServiceImpl implements BookService {private BookDao bookDao;public void setBookDao(BookDao bookDao) {this.bookDao = bookDao;}@Overridepublic void save() {System.out.println("book service save ...");bookDao.save();}
}

集合类型的setter注入

<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"><!--数组注入--><property name="array"><array><value>100</value><value>200</value><value>300</value></array></property><!--list集合注入--><property name="list"><list><value>itcast</value><value>itheima</value><value>boxuegu</value><value>chuanzhihui</value></list></property><!--set集合注入--><property name="set"><set><value>itcast</value><value>itheima</value><value>boxuegu</value><value>boxuegu</value></set></property><!--map集合注入--><property name="map"><map><entry key="country" value="china"/><entry key="province" value="henan"/><entry key="city" value="kaifeng"/></map></property><!--Properties注入--><property name="properties"><props><prop key="country">china</prop><prop key="province">henan</prop><prop key="city">kaifeng</prop></props></property>
</bean>
public class BookDaoImpl implements BookDao {private int[] array;private List<String> list;private Set<String> set;private Map<String,String> map;private Properties properties;public void setArray(int[] array) {this.array = array;}public void setList(List<String> list) {this.list = list;}public void setSet(Set<String> set) {this.set = set;}public void setMap(Map<String, String> map) {this.map = map;}public void setProperties(Properties properties) {this.properties = properties;}public void save() {System.out.println("book dao save ...");System.out.println("遍历数组:" + Arrays.toString(array));System.out.println("遍历List" + list);System.out.println("遍历Set" + set);System.out.println("遍历Map" + map);System.out.println("遍历Properties" + properties);}
}
关键字:杭州app定制开发_程序员接活的平台网站_最近的新闻大事_竞价推广账户托管

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: