Spring#(二)---spring思想的应用

Spring的配置文件

(相关的XML文件编写)

在IOC思想解释中讲到,通过配置文件提供信息和类定义中有set方法来实现创建对象,并保存在ioc容器中.
编写方法:
1.创建普通maven项目
2.在src/main/java中创建你需要的类
3.在src/main/resources中创建一个xml文件
4.编写xml文件

  • 添加xml版本和编码方式
    <?xml version="1.0" encoding="UTF-8"?>

  • 创建bean标签
    <beans></beans>

  • 规范bean标签
    <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/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"></beans>
    因为xml文档都有格式,为了spring的配置文件增加的节点能满足要求、合法,所以引入校验该xml的格式文件。
    xmlns是xml命名空间的意思,而xmlns:xsi是指xml所遵守的标签规范。
    1.xmlns:关于初始化bean的格式文件地址
    2.xmlns:xsi:辅助初始化bean
    3.xsi:context:关于spring上下文,包括加载资源文件
    4.xsi:schemaLocation:用于声明了目标名称空间的模式文档

  • 开始创建对象
    第一种情况:普通创建对象

<bean id="对象名" class="对象类">
        <property name="对象属性名" value="对象属性的值"/>
</bean>

第二种情况:如果你构建的类中有自动注入对象,那么需要在IOC容器中也创建要注入的bean

public class People {
    @Autowired//不指定,默认注入同名对象
    		  //要是里面的required="false"
    private Cat cat;
    @Autowired
    @Qualifier(value = "dog2")//指定注入那个特定对象
    private Dog dog;
    private String name;
......    
<context:annotation-config></context:annotation-config>
<!--开启扫描注解-->
<bean id="cat" class="com.cs.pojo.Cat"></bean>
<bean id="dog2" class="com.cs.pojo.Dog"></bean>
<bean id="dog22" class="com.cs.pojo.Dog"></bean>
<bean id="people" class="com.cs.pojo.People"></bean>

第三种情况:直接通过注解注入创建对象,你创建的类中的成员通过value注解注入属性具体值时:

@Component//将其
public class User {
    @Value("注解实现")
    public String name;

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                '}';
    }
}

<!--    指定要扫描的包,这个包下的注释就会生效-->
<context:component-scan base-package="com.cs.dao"/>
<context:annotation-config></context:annotation-config>

不通过XML文件提供信息创建对象

我们可以通过创建一个配置类来实现不用xml文件获取注入信息,步骤如下:
1.创建一个配置类
2.给配置类添加注解,让它的功能与xml文件相当

@Configuration  //这个也会被spring注册到容器中,代表这是一个配置类
                //配置类可以代替xml配置文件
@ComponentScan("com.cs.pojo")//扫描包下的组件,让我们写的组件生效
@Import(Config2.class)//将config2合并在一起
public class Config {
    @Bean   //在配置类中使用@bean注解相当于在xml文件中添加bean标签
            //其中方法名就相当于xml文件的id,返回值相当于xml文件中的class
    public User getUser(){
        return new User();
    }
}

创建对象后,如何从容器中获得对象

情况一:通过xml获得信息创建的对象

//spring通过beans.xml文件获得了创建对象的信息,然后创建对象放入context容器中
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
//通过context能够取到对象
Hello hello =(Hello)context.getBean("hello");
System.out.println(hello.toString());

情况二:通过配置类来代替xml的

//用配置类代替xml文件后要换方式获取容器
ApplicationContext context = new AnnotationConfigApplicationContext(Config.class);
User getUser = (User) context.getBean("getUser");
System.out.println(getUser.getName());

代理思想

目的:能够让真实执行的业务变得单一纯粹
原理:创建一个代理类实现真实类所需要做的各种事,然真实类变得功能单一纯粹.

AOP思想的实现步骤

以下三种方法均实现了在执行com.cs.service.UserServiceImpl.*全部方法时,之前和之后的具体导入.
导入对应的包:

 <dependencies>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.4</version>
        </dependency>
</dependencies>

实现用来切入的对象:
首先:

<!--    开启注释支持-->
    <aop:aspectj-autoproxy/>

方法一:使用spring提供的API

public class Log implements MethodBeforeAdvice {
    @Override
    public void before(Method method, Object[] args, Object target) throws Throwable {
        System.out.println(target.getClass().getName()+"的"+method.getName()+"被执行了");
    }
}
    <aop:config>
<!--建立切入点-->
        <aop:pointcut id="pointcut" expression="execution(* com.cs.service.UserServiceImpl.*(..))"/>
<!--在切入点执行类-->
        <aop:advisor advice-ref="log" pointcut-ref="pointcut"/>

    </aop:config>

方法二:使用自定义切入点实现

public class DiyPointCut {
    public void before(){
        System.out.println("+++++++++executeBefore+++");
    }
    public void after(){
        System.out.println("+++++++++executeAfter+++");
    }
}

    <bean id="diy" class="com.cs.diy.DiyPointCut"/>
    <aop:config>
<!--        切入面-->
<!--diy包中的类DiyPointCut此时是个切入面-->
        <aop:aspect ref="diy">
<!--            切入点-->
<!-- 当* com.cs.service.UserServiceImpl.*(..)路径下的所有类执行时放置一个切入点-->
            <aop:pointcut id="point" expression="execution(* com.cs.service.UserServiceImpl.*(..))"/>
<!--            通知-->
<!--当执行到切入点时,执行通知方法,实现插入通知方法在代码中-->
            <aop:before method="before" pointcut-ref="point"/>
            <aop:after method="after" pointcut-ref="point"/>
        </aop:aspect>
    </aop:config>

方法三:使用注解实现

@Aspect
public class AnnotationPointCut {
    @Before("execution(* com.cs.service.UserServiceImpl.*(..))")
    public void before(){
        System.out.println("+++++executeBefore+++++");
    }
    @After("execution(* com.cs.service.UserServiceImpl.*(..))")
    public void after(){
        System.out.println("+++++executeAfter+++++");
    }
    @Around("execution(* com.cs.service.UserServiceImpl.*(..))")
    public void around(ProceedingJoinPoint joinPoint) throws Throwable {

        System.out.println("Signature:"+joinPoint.getSignature());

        System.out.println("++++++++++");
        Object proceed = joinPoint.proceed();
        System.out.println("----------");
    }
}
    <bean id="annotationPointCut" class="com.cs.diy.AnnotationPointCut"/>

Spring整合Mybatis

第一步:在ioc容器中注册好相关对象:
数据源对象,sqlSessionFactory对象,sqlSession对象,dao获取对象

<!--    DateSource:使用spring的数据源替代mybatis的配置 -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&amp;useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
    </bean>
<!--    sqlSessionFactory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
<!--        绑定mybatis配置文件-->
        <property name="configLocation" value="classpath:mybatisConfig.xml"/>
        <property name="mapperLocations" value="classpath:com/cs/mapper/UserMapper.xml"/>
     </bean>

<!--    sqlSession-->
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<!--        使用构造器注入sqlSessionFactory 因为没有set方法-->
        <constructor-arg index="0" ref="sqlSessionFactory"/>
    </bean>
 <bean id="userMapper" class="com.cs.mapper.UserMapperImpl">
        <property name="sqlSessionTemplate" ref="sqlSession"/>
    </bean>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值