Spring

框架--别人封装好供我们使用 1.下载jar 2.搭建到我们的开发环境中 3.Spring最主要的学习内容 IOC Inversion Of Control 控制反转 DI Dependency Injection 依赖注入 AOP Aspect Oriented Programming 面向切面 (Object Oriented Programming) SpringJDBC 只有jdbc 没有连接池 有bug 4.导包 spring-beans spring-context spring-core 5.BeanFactory factory = new ClassPathXmlApplicationContext(""); //全局上下文管理对象 写在xml文件里 6. Student = (Student)factory.getBean("student"); 异常 classNotFind org.apache.commens.Loggin.LogFactory Expression 依赖项 后续用maven就没问题了 痛点 bean列表过长 1.全局上下文接收参数可接受多个参数列表(载入多个xml文件) ("","","","") //String 动态参数列表 (new String[] {"",""}) //String 数组 2.通配符 ApplicationContext*.xml 3.主配置文件引入其他配置文件 主配置中 想要某些多例 spring管理的这些对象默认单例 单例模式底层---生命周期托管的方式(Servlet) 单例模式可修改 3.立即加载/延迟加载 单例模式默认立即加载(SpringBean工厂创建时) 原型模式,对象在工厂创建时不会创建,要的时候创建 平时开发更多使用延迟加载 4.对象中有属性 自动将属性值赋上 属性很多 int string 属性如果是个对象 属性万一是个抽象/接口 属性是集合?? ----------------------- 5.对象交给spring管理--IOC 对象中可能有一些属性,自动帮我们把属性赋值 set赋值 / xxx 构造方法赋值 最好写type 写了就不用根据反射去推测 效率会高 我们管理的对象更可能是dao service controller这种的 他们内部还有其他的对象 对象创建的同时能自动帮我们把属性值注入进去 控制翻转IOC 依赖注入DI 面向切面 AOP. DI 某一属性为空 某一属性中 有特殊字符 string 写value标签内 内部一律当做字符串 一个bean内部有一个bean //项目内统一 也可以bean嵌套写法 (这样不能直接访问子bean,但可以fatherbean.getPrivateBean) 另: fatherbean内可以直接property name = "childbean.propname" …进行赋值 自动装配 构造方法 aaa //2 List aaa set集合相似 map properties 某一个bean对象中有一个属性是Properties类型(本质就是个map) value 同一个属性 可以同时配置构造方法和set方法赋值,但最终适用set(后执行) 命名空间 标签配置过程中,为简化配置文件写法 spring提供以下方式 命名空间 property P: constructor-arg c: 有了这种命名空间规范后,可以将原来嵌套在bean标签中的两个属性 放在bean标签中 // ... //命名空间都需要导标签 p:map-ref="xx" AOP 面向切面编程思想 重要概念 起始对象(main 程序开始 发送请求) 目标对象(Target Object) 切面对象(Aspect) 代理对象(AOP Proxy Spring容器帮我们创建的 用来管理切面对象) 切点(切入点 Pointcut 目标对象中的方法 目标 切面-观察 目标做了件感兴趣的是 观察者设计模式) 连接点(Join Point 切面对象中的方法) 建议/通知(advice 连接点中执行的过程) 前置 before 后置 after-returning 异常 after-throwing 最终 after 环绕 around 配置 //写在标签内外都一样,写在里面是为了好看 注解开发 替代bean标签 @Component("") //相当于bean 和 id @Controller @Service @Reponsitory @Scope(value = "default/singelton/.." scopeName = "" ) @Lazy(value = "true") //true是懒加载 false或不写立即加载 @PostContructor 方法上 对象加载就执行 @PreDestory 方法上 对象销毁执行 做bean的DI注入 //属性或set上 @Autowire 可放在构造方法上(调) set方法(调) 属性上(反射) 先找属性名 再找名字 再找类型 多了没有都不行 @Qualifire("") 实现对一个对象注入微调 填谁注谁 --@Resources("bea8nid") 需要导包 不是spring家族 维护麻烦 @Value("值") 还支持SpEL @Value("${}") 不是我们创建的类 但也想通过Spring管理 注解类 @Configuration @ComponentScan(basePackages = {"controller","dao",".."}) @Bean(value = "") 但如果同名 就不用加value了 BeanFactory beanFactory = new AnnotationConfigApplicationContext(xxxConfigClass.class); @PropertySource("ClassPath:jdbc.properties") @Value("${user}") ... Spring底层也有个username 一般这个用别的key 默认Administrator import org.springframwork.context.annotation.ComponentScan import ...Configuration; im... ..Import; @import(ConfigClass.class) 1.注解用于替代原有的bean标签 @Component() - MVC架构分层更加清晰 控制层@Controller 业务层@Service 持久层@Reponsitory 2.用于替代原有bean标签中的属性 对象管理的机制 @Scope("singleton/prootype") @Lazy(true/false) @PostContructor method-init 当前对象创建时 执行一个方法 @ProDestory method-destory ..销毁.. 3.用于对象创建后的自动注入 @Autowired byName -> byType @Qualifire 搭配上面注解进行注入微调 指定上面其中一个 @Value 属性是个具体的值 支持SpEL @Resource 相当于1、2合体,必须指定名字 不是spring家族的 4.以上注解都是些在自己定义的类中 有些时候类不是我们写的 JdbcTemplate DataSource 还想通过注解进行管控这些对象 1. 自己定义类 类中自己定义方法,作用是为了创建那些需要管控的对象 方法通常有返回值,就是那些类的对象 方法上面添加@Bean 2. 需要在自己写的类上面加个注解 -> 核心xml一样 @Configuration 3. 改变了读取xml的过程 创建工厂方式也要相应改变 BeanFactory factory = AnnotationConfigApplicationContext(xx.class) 4. 如果想添加一些外部文件中的内容 内容可以用SpEL来读 5. 自定义类中可能有很多方法 可以将自定义类拆分 还多个小配置类 @Import(xxx.class)引入小配置类 小知识 加载beanFactory时候的类 有好几个 ClassPath... FileSystem.. SystemPath 系统路径 当前电脑 c d ProjectPath 工程路径 写源代码的地方 不是最终字节码位置 ClassPath 真实类路径 字节码所在地方 字节码文件信息加载入内存
posted @ 2022-04-30 17:12  画饼躺平学习冲  阅读(19)  评论(0)    收藏  举报