Spring框架复习

网友投稿 739 2022-09-10

Spring框架复习

Spring框架复习

1.spring核心概念复习

Spring两大核心:基于工厂模式IOC(DI)和基于动态代理AOP。

其中IOC(DI)是指控制器反转(依赖注入),原来要使用某个类对象实例是必须自己创建,使用spring后就不需要自己创建,由spring创建,需要时直接从spring中获取并且有依赖关系是会spring会通过反射自动注入。

AOP就是不影响正常执行过程的前后加入额外的逻辑。比如权限,日志等,该执行的业务逻辑正常执行知识可以进行权限的判断核日志记录。

2.springXML编程-IOC

下面对ioc进行代码书写回顾:Classpathxml*applictionContext

导入项目所需的依赖

junit junit 4.12 test org.springframework spring-context 4.3.7.RELEASE org.springframework spring-core 4.3.7.RELEASE org.springframework spring-beans 4.3.7.RELEASE org.springframework spring-context-support 4.3.7.RELEASE org.springframework spring-expression 4.3.7.RELEASE log4j log4j 1.2.14 org.projectlombok lombok 1.18.8 provided

Spring的配置文件

Spring的测试

package com.bruceliu.test;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import java.util.Date;public class TestSpringIoc { /** * 基于xml配置文件 */ @Test public void test() throws Exception { //通过xml初始化spring容器 ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); System.out.println(context.getBean(Date.class)); //向获取spring中所有的bean的类型id String[] beanDefinitionNames = context.getBeanDefinitionNames(); for (String beanDefinitionName : beanDefinitionNames) { System.out.println(beanDefinitionName); } }}

3.spring注解编程-IOC

3.1. 引入

上面是通过配置文件的方式注册bean,其实现在spring提倡以注解驱动的方式实现bean的注册

3.2. 组件注册

3.2.1.配置类&Bean注解

@Configuration:加了这个注解的类就相当于传统的一个applicationContext-xxx.xml@Bean:在标注了@Configuration的类里面的方式上面打上@bean就相当于在applicationContext-xxx.xml配置的一个​​​​ Dao的名字默认就是方法名,如果想改方法名使用@Bean(“beanName”)

//注解类==配置文件@Configuration //告诉spring这是一个注解类public class MainConfig { //相当于在xml中配置了 @Bean("userDao") //指定bean的名字 public UserDao userDao01(){ return new UserDaoImpl(); }}

public class MainConfigTest { @Test public void testIoc(){ //1传统方式xml方式 //ApplicationContext context = new ClassPathXmlApplicationContext( // "applicationContext.xml"); //UserDao userDao = context.getBean(UserDao.class); //System.out.println(userDao.loadUser(1L)); //2 注解方式不需要配置文件,那bean怎么配置呢? 获取容器的时候原来制定配置文件,现在制定配置类 ApplicationContext context = new AnnotationConfigApplicationContext(MainConfig.class); UserDao userDao = context.getBean(UserDao.class); System.out.println(userDao.loadUser(1L)); String[] beanNamesForType = context.getBeanNamesForType(UserDao.class); for (String beanName : beanNamesForType) { System.out.println(beanName); } }}

3.2.3.@ComponentScan扫描bean

我们原来使用spring的使用不会在xml中一个一个配置bean,我们在再类上加上@Repository,@Service,@Controller @Component,并且注入时可以使用@AutoWired的注解注入。 这一切的功能都需要我们配置包扫描​​.​​ 然而现在注解驱动开发已经没有了配置文件,不能配置。但是提供了@ComponentScan,我们可以在配置类上面加上这个注解也是一样,并且也能扫描配置包项目的相关注解,也能完成自动注入。

接下来我们先来看扫描组件,后面再看注入

package com.bruceliu.service;import com.bruceliu.bean.User;import org.springframework.stereotype.Service;@Servicepublic class UserService { public User getUser(Long id){ System.out.println("userservice..."); return null; }}

package com.bruceliu.controller;import com.bruceliu.bean.User;import org.springframework.stereotype.Controller;@Controllerpublic class UserController { //先不拷贝页面,直接打印即可 public User getUser(Long id){ System.out.println("usercontroller..."); return null; }}

//注解类==配置文件@Configuration //告诉spring这是一个注解类@ComponentScan("com.bruceliu")public class MainConfig { //相当于在xml中配置了 @Bean("userDao") //指定bean的名字 public UserDao userDao01(){ return new UserDaoImpl(); }}

public class MainConfigTest { @Test public void testIoc(){ ApplicationContext context = new AnnotationConfigApplicationContext(MainConfig.class); for (String beanName : context.getBeanDefinitionNames()) { System.out.println(beanName); } }}

3.2.4.高级语法

package com.bruceliu.spring;import com.bruceliu.dao.UserDao;import com.bruceliu.dao.impl.UserDaoImpl;import org.springframework.context.annotation.*;import org.springframework.stereotype.Controller;import org.springframework.stereotype.Service;//注解类==配置文件//注解类==配置文件@Configuration //告诉spring这是一个注解类//@ComponentScan(value = "com.bruceliu")//includeFilters = Filter[] 包含过滤器//excludeFilters = Filter[] 排除过滤器//useDefaultFilters = 使用默认过滤器//多个扫描配置方法:使用ComponentScans@ComponentScans(value = { @ComponentScan(value = "com.bruceliu", //excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = {Controller.class, Service.class}) //关闭默认全部扫描includeFilters才能生效 includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = {Service.class}),useDefaultFilters = false )})public class MainConfig { //相当于在xml中配置了 @Bean("userDao") //指定bean的名字 public UserDao userDao01() { return new UserDaoImpl(); }}

public class MainConfigTest { @Test public void testIoc(){ ApplicationContext context = new AnnotationConfigApplicationContext(MainConfig.class); for (String beanName : context.getBeanDefinitionNames()) { System.out.println(beanName); } }}

注意1分开测试排除和包含 注意2:其他配置类影响-本身扫描也包含配置类

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:python数据类型(第二弹)(python八种数据类型)
下一篇:Python知识点(python知识点图)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~