Spring学习1-IOC和DI

1、下载eclipse

https://spring.io/tools3/eclipse

2、将jar包导入到当前的web工程中

https://www.cnblogs.com/xxuan/p/6949640.html

3、eclipse中添加spring XML配置文件

https://www.cnblogs.com/XingXiaoMeng/p/11159011.html

4、spring所需要的jar

https://blog.csdn.net/zhidashang/article/details/78706027

使用Aspect的jar

http://www.eclipse.org/aspectj/downloads.php
http://mvnrepository.com/artifact/org.aspectj/aspectjweaver/1.8.7

下载mysql-connector.java

https://mvnrepository.com/artifact/mysql/mysql-connector-java/8.0.18

5、学习博客

https://www.cnblogs.com/wmyskxz/p/8830632.html

AOP 即 Aspect Oriented Program 面向切面编程

首先,在面向切面编程的思想里面,把功能分为核心业务功能,和周边功能。
所谓的核心业务,比如登陆,增加数据,删除数据都叫核心业务
所谓的周边功能,比如性能统计,日志,事务管理等等
周边功能在 Spring 的面向切面编程AOP思想里,即被定义为切面
在面向切面编程AOP的思想里面,核心业务功能和切面功能分别独立进行开发,然后把切面功能和核心业务功能 “编织” 在一起,这就叫AOP

AOP 的目的

AOP能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性。

AOP 当中的概念:

切入点(Pointcut)
在哪些类,哪些方法上切入(where)
通知(Advice)
触发切面的代码
切面(Aspect)
封装的周边功能的类
织入(Weaving)
把切面加入到对象,并创建出代理对象的过程。(由 Spring 来完成)

装配常用的Bean类的方法:

public class ComplexAssembly {
	private Long id;
	private List<String> list;
	private Map<String, String> map;
	private Properties properties;
	private Set<String> set;
	private String[] array;

	/* setter and getter */
}


<bean id="complexAssembly" class="pojo.ComplexAssembly">
  <!-- 装配Long类型的id -->
  <property name="id" value="1"/>

  <!-- 装配List类型的list -->
  <property name="list">
      <list>
         <value>value-list-1</value>
         <value>value-list-2</value>
         <value>value-list-3</value>
      </list>
  </property>
 <property name="map">
      <map>
         <entry key="key1" value="value-key-1"/>
         <entry key="key2" value="value-key-2"/>
         <entry key="key3" value="value-key-2"/>
      </map>
 </property>
  <property name="properties">
      <props>
         <prop key="prop1">value-prop-1</prop>
         <prop key="prop2">value-prop-2</prop>
         <prop key="prop3">value-prop-3</prop>
      </props>
  </property>
 
  <!-- 装配Set类型的set -->
  <property name="set">
      <set>
         <value>value-set-1</value>
         <value>value-set-2</value>
         <value>value-set-3</value>
      </set>
  </property>

  <!-- 装配String[]类型的array -->
  <property name="array">
      <array>
                      <value>value-array-1</value>
         <value>value-array-2</value>
         <value>value-array-3</value>
      </array>
  </property>

</bean>

我们更多的是使用注解进行装配bean
通过注解装配 Bean
上面,我们已经了解了如何使用 XML 的方式去装配 Bean,但是更多的时候已经不再推荐使用 XML 的方式去装配 Bean,更多的时候回考虑使用注解(annotation) 的方式去装配 Bean。
优势:
1.可以减少 XML 的配置,当配置项多的时候,臃肿难以维护
2.功能更加强大,既能实现 XML 的功能,也提供了自动装配的功能,采用了自动装配后,程序猿所需要做的决断就少了,更加有利于对程序的开发,这就是“约定由于配置”的开发原则
在 Spring 中,它提供了两种方式来让 Spring IoC 容器发现 bean:
组件扫描:通过定义资源的方式,让 Spring IoC 容器扫描对应的包,从而把 bean 装配进来。
自动装配:通过注解定义,使得一些依赖关系可以通过注解完成。
使用@Component , @ComponentScan(basePackages=“com.xxx.xxx”),@Autowired()

//定义bean类,设置注解
@Component("studentService")
@Scope("prototype") //使用的prototype,那么每次使用getBean获取对象的时候,都会出现一个新的对象 ,默认使用singleton,只会有个对象
public class StudentServiceImp implements StudentServiceDao {
 @Autowired   //默认是按照类型的进行装配
 public Student student = null;
 public void describe() {
      System.out.println("姓名2==" + student.name + "   年龄==" + student.age);
 }
}

//在配置文件中配置组件扫描 不要忘记在beans中配置响应的属性

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd
 http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsd">
 <!-- 在配置文件中配置组件扫描 -->
 <context:component-scan base-package="com.test" />

在java文件中进行使用

 AnnotationConfigApplicationContext annotationConfigApplicationContext = newAnnotationConfigApplicationContext(StudentConfig.class);

//         每次使用的时候创建一个新的对象  配合的是使用@scope注解
       StudentServiceImp bean4 = (StudentServiceImp)annotationConfigApplicationContext.getBean("studentService");
       bean4.describe();
       StudentServiceImp bean7 = (StudentServiceImp)annotationConfigApplicationContext.getBean("studentService");
       System.out.println("对象4=="+bean4+"   对象7=="+bean7);  //获取到的是不同的对象

//可以在配置文件中设置init-method  destroy-method  表示的是声明周期的两个执行的方法  应该能用@PostConstruct 和 @PreDestroy 进行代替

 <bean id="testBean" class="com.test.bean.TestDaoBean" init-method="initMethod" destroy-method="destroyMethod"/>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值