企业网站群建设的原因,腾讯企业邮箱域名可以做网站吗,网站开发费怎么入账,ppt模板免费网站在线制作初始Spring 一、Spring核心概念1.1IoC(Inversion of Contral)#xff1a;控制反转1.2IoC代码实现1.2DI代码实现 二、bean的相关操作2.1bean的配置2.1.1bean的基础配置2.1.2bean的别名配置2.1.3bean的作用范围配置 2.2bean的实例化 - - 构造方法2.3bean的实例化 - - 实例工厂与… 初始Spring 一、Spring核心概念1.1IoC(Inversion of Contral)控制反转1.2IoC代码实现1.2DI代码实现 二、bean的相关操作2.1bean的配置2.1.1bean的基础配置2.1.2bean的别名配置2.1.3bean的作用范围配置 2.2bean的实例化 - - 构造方法2.3bean的实例化 - - 实例工厂与FactoryBean2.4bean的生命周期 总结 一、Spring核心概念
1.1IoC(Inversion of Contral)控制反转
代码书写现状 耦合度偏高 解决方案 使用对象时在程序中不要主动使用new产生对象转换为由外部提供对象 IoC(Inversion of Contral)控制反转 对象的创建控制权由程序转移到外部这种思想称为控制反转 Spring技术对IoC思想进行了实现 Spring提供了一个容器称为IoC容器用来充当IoC思想中的“外部” IoC容器负责对象的创建、初始化等一系列工作被创建或被管理的对象在IoC容器中统称为Bean DI(Dependency Injection)依赖注入 在容器中建立bean与bean之间的依赖关系的整个过程称为依赖注入
1.2IoC代码实现
1.导入Spring坐标
dependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion5.2.21.RELEASE/version
/dependency2.定义Spring管理类
package com.practice.dao;/*** Author YJ* Date 2023/7/25 11:26* Description:*/
public interface BookDao {void save();
}
package com.practice.service;/*** Author YJ* Date 2023/7/25 11:28* Description:*/
public interface BookService {void save();
}
package com.practice.service.impl;import com.practice.dao.BookDao;
import com.practice.dao.impl.BookDaoImpl;
import com.practice.service.BookService;/*** Author YJ* Date 2023/7/25 11:28* Description:*/
public class BookServiceImpl implements BookService {private BookDao bookDao new BookDaoImpl();public void save() {bookDao.save();}
}
3.创建Spring配置文件applicationContext.xml配置对应类作为Spring管理的bean
?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.xsd!--1.导入spring的坐标spring-context对应的版本号是5.2.21.RELEASE--!--2.配置bean--bean idbookDao classcom.practice.dao.impl.BookDaoImpl/bean idbookService classcom.practice.service.impl.BookServiceImpl/
/beans4.初始化IoC容器Spring核心容器/Spring容器通过容器获取bean
public class App {public static void main(String[] args) {//获取IoC容器ApplicationContext act new ClassPathXmlApplicationContext(applicationContext.xml);//获取bean/*BookDao bookDao (BookDao) act.getBean(bookDao);bookDao.save();*/BookService bookService (BookService) act.getBean(bookService);bookService.save();}
}1.2DI代码实现
1.删除业务层中使用new的方式创建的dao对象2.提供对应的setter方法3.配置service与dao的关系 property标签表示配置当前bean的属性 name属性表示配置哪一个具体的属性 ref属性表示参照哪一个bean
package com.practice.service.impl;import com.practice.dao.BookDao;
import com.practice.service.BookService;public class BookServiceImpl implements BookService {//删除业务层中使用new的方式创建的dao对象private BookDao bookDao;public void save() {bookDao.save();}//提供对应的set方法public void setBookDao(BookDao bookDao) {this.bookDao bookDao;}
}?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.xsd!--1.导入spring的坐标spring-context对应的版本号是5.2.21.RELEASE--!--2.配置bean--bean idbookDao classcom.practice.dao.impl.BookDaoImpl/bean idbookService classcom.practice.service.impl.BookServiceImpl!--配置service与dao的关系--!--property标签表示配置当前bean的属性--!--name属性表示配置哪一个具体的属性--!--ref属性表示参照哪一个bean--property namebookDao refbookDao//bean
/beans二、bean的相关操作
2.1bean的配置
2.1.1bean的基础配置
1.功能 定义Spring核心容器管理的对象2.格式
beansbean/bean/bean
/beans3.属性 3.1id: bean的id使用容器可以通过id值获取对应的bean,在一个容器中id值唯一 3.2class: bean的类型即配置的bean的全路径类名
2.1.2bean的别名配置
别名配置就是在bean标签中添加一个name属性这个name属性就是bean的别名可以有多个别名中间用逗号、空格或分号隔开即可
?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.xsd!--1.导入spring的坐标spring-context对应的版本号是5.2.21.RELEASE--!--2.配置bean--bean idbookDao classcom.practice.dao.impl.BookDaoImpl/!--name起别名--bean idbookService nameservice classcom.practice.service.impl.BookServiceImpl!--配置service与dao的关系--!--property标签表示配置当前bean的属性--!--name属性表示配置哪一个具体的属性--!--ref属性表示参照哪一个bean--property namebookDao refbookDao//bean
/beanspackage com.practice;import com.practice.dao.BookDao;
import com.practice.service.BookService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** Author YJ* Date 2023/7/25 11:33* Description:*/
public class App {public static void main(String[] args) {//获取IoC容器ApplicationContext act new ClassPathXmlApplicationContext(applicationContext.xml);//获取bean/*BookDao bookDao (BookDao) act.getBean(bookDao);bookDao.save();*/BookService bookService (BookService) act.getBean(service);//用到别名servicebookService.save();}
} 若是bean的名称跟配置的不一致会出现NoSuchBeanDefinitionException异常表示该bean未定义
public class App {public static void main(String[] args) {//获取IoC容器ApplicationContext act new ClassPathXmlApplicationContext(applicationContext.xml);//获取bean/*BookDao bookDao (BookDao) act.getBean(bookDao);bookDao.save();*/BookService bookService (BookService) act.getBean(service1);//用到错误别名service1bookService.save();}
} 2.1.3bean的作用范围配置
Spring默认配置的bean是一个单列的即只有一个bean对象如下所示
public class AppForScope {public static void main(String[] args) {//获取IoC容器ApplicationContext act new ClassPathXmlApplicationContext(applicationContext.xml);BookDao bookDao1 (BookDao) act.getBean(bookDao);BookDao bookDao2 (BookDao) act.getBean(bookDao);System.out.println(bookDao1);System.out.println(bookDao2);}
} 我们可以通过配置bean的文件控制是否产生一个对象还是多个对象通过scope属性定义bean的作用范围可选范围如下 singleton:单例默认 prototype:非单例 适合交给容器进行管理的bean 表现层对象 业务层对象 数据层对象 工具对象 不适合交给容器进行管理的bean 封装实体的域对象
2.2bean的实例化 - - 构造方法
bean本质上就是对象创建bean使用构造方法完成
public class BookDaoImpl implements BookDao {private BookDaoImpl() {System.out.println(book dao constructor running...);}public void save() {System.out.println(bookDao save~);}
}public class App {public static void main(String[] args) {//获取IoC容器ApplicationContext act new ClassPathXmlApplicationContext(applicationContext.xml);//获取beanBookDao bookDao (BookDao) act.getBean(bookDao);bookDao.save();}
}?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.xsd!--1.导入spring的坐标spring-context对应的版本号是5.2.21.RELEASE--!--2.配置bean--bean idbookDao classcom.practice.dao.impl.BookDaoImpl scopeprototype/!--name起别名--bean idbookService nameservice classcom.practice.service.impl.BookServiceImpl !--配置service与dao的关系--!--property标签表示配置当前bean的属性--!--name属性表示配置哪一个具体的属性--!--ref属性表示参照哪一个bean--property namebookDao refbookDao//bean
/beans表明bean在创建时调用的无参构造方法无参构造方法如果不存在会抛出BeanCreationException异常
2.3bean的实例化 - - 实例工厂与FactoryBean
?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.xsd!--1.导入spring的坐标spring-context对应的版本号是5.2.21.RELEASE--!--2.配置bean--!--方式三使用实例化工厂实例化bean--bean iduserFactory classcom.practice.factory.UserDaoFactory/bean iduserDao factory-beanuserFactory factory-methodgetUserDao/
/beanspublic interface UserDao {public void save();
}public class UserDaoImpl implements UserDao {public void save() {System.out.println(UserDao save...);}
}public class UserDaoFactory {public UserDao getUserDao(){return new UserDaoImpl();}
}
package com.practice;import com.practice.dao.UserDao;
import com.practice.factory.UserDaoFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** Author YJ* Date 2023/7/25 19:09* Description:*/
public class AppForInstanceUser {public static void main(String[] args) {/*//创建实例工厂对象UserDaoFactory userDaoFactory new UserDaoFactory();UserDao userDao userDaoFactory.getUserDao();userDao.save();*///获取IoC容器ApplicationContext act new ClassPathXmlApplicationContext(applicationContext.xml);//获取beanUserDao userDao (UserDao) act.getBean(userDao);userDao.save();}
} 使用FactoryBean实例化bean
package com.practice.factory;import com.practice.dao.UserDao;
import com.practice.dao.impl.UserDaoImpl;
import org.springframework.beans.factory.FactoryBean;/*** Author YJ* Date 2023/7/25 19:21* Description:使用FactoryBean实例化bean*/
public class UserDaoFactoryBean implements FactoryBeanUserDao {public UserDao getObject() throws Exception {//代替原始实例工厂中创建对象的方法return new UserDaoImpl();}public Class? getObjectType() {return UserDao.class;}
}
?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.xsd!--方式三使用实例化工厂实例化bean--bean iduserFactory classcom.practice.factory.UserDaoFactory/bean iduserDao1 factory-beanuserFactory factory-methodgetUserDao/!--方式四使用FactoryBean实例化bean--bean iduserDao classcom.practice.factory.UserDaoFactoryBean//beans使用这种方式创建出的bean是单例的 可在UserDaoFactoryBean中实现方法isSingleton并返回false即可
public boolean isSingleton() {return false;}2.4bean的生命周期
生命周期从创建到消亡的完整过程bean生命周期bean从创建到消毁的整体过程bean生命周期控制在bean创建后到销毁前做一些事情
package com.practice.dao.impl;import com.practice.dao.BookDao;/*** Author YJ* Date 2023/7/25 11:24* Description:*/
public class BookDaoImpl1 implements BookDao {public void save() {System.out.println(bookDao save~);}//表示bean初始化public void init() {System.out.println(init...);}//表示bean销毁前对应操作public void destroy() {System.out.println(destroy...);}
}
?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.xsd!--方式三使用实例化工厂实例化bean--!--bean iduserFactory classcom.practice.factory.UserDaoFactory/--!--bean iduserDao1 factory-beanuserFactory factory-methodgetUserDao/--!--方式四使用FactoryBean实例化bean--!--bean iduserDao classcom.practice.factory.UserDaoFactoryBean/--!--配置bean的生命周期--bean idbookDao classcom.practice.dao.impl.BookDaoImpl1 init-methodinit destroy-methoddestroy/
/beanspackage com.practice;import com.practice.dao.BookDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** Author YJ* Date 2023/7/25 19:40* Description:*/
public class AppForLifeCycle {public static void main(String[] args) {//获取IoC容器ClassPathXmlApplicationContextact new ClassPathXmlApplicationContext(applicationContext.xml);//获取beanBookDao bookDao (BookDao) act.getBean(bookDao);bookDao.save();//关闭容器才能看到destory方法的执行结果//1.暴力关闭act.close();//2.关闭钩子act.registerShutdownHook();}
} package com.practice.service.impl;import com.practice.dao.BookDao;
import com.practice.dao.impl.BookDaoImpl1;
import com.practice.service.BookService;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;/*** Author YJ* Date 2023/7/25 11:28* Description:*/
public class BookServiceImpl1 implements BookService, InitializingBean, DisposableBean {private BookDao bookDao;public void save() {System.out.println(bookService save...);bookDao.save();}public void afterPropertiesSet() throws Exception {System.out.println(service init...);}public void destroy() throws Exception {System.out.println(service destroy...);}public void setBookDao(BookDaoImpl1 bookDao) {this.bookDaobookDao;}
}
package com.practice;import com.practice.dao.BookDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** Author YJ* Date 2023/7/25 19:40* Description:*/
public class AppForLifeCycle {public static void main(String[] args) {//获取IoC容器ClassPathXmlApplicationContext act new ClassPathXmlApplicationContext(applicationContext.xml);//获取beanBookDao bookDao (BookDao) act.getBean(bookDao);bookDao.save();//act.close();act.registerShutdownHook();}
}
?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.xsd!--方式三使用实例化工厂实例化bean--!--bean iduserFactory classcom.practice.factory.UserDaoFactory/--!--bean iduserDao1 factory-beanuserFactory factory-methodgetUserDao/--!--方式四使用FactoryBean实例化bean--!--bean iduserDao classcom.practice.factory.UserDaoFactoryBean/--!--配置bean的生命周期--bean idbookDao classcom.practice.dao.impl.BookDaoImpl1 init-methodinit destroy-methoddestroy/bean idbookService classcom.practice.service.impl.BookServiceImpl1property namebookDao refbookDao//bean
/beans总结
关于Spring的初步认识我们就学到这里了关于bean的操作我们有了基本的认识欢迎各位小伙伴点赞关注