Spring项目运行流程

第一步

加载Spring容器

ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");

第二步

IOC容器去读取配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:tx="http://www.springframework.org/schema/tx"
    
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="
    http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/aop 
    http://www.springframework.org/schema/aop/spring-aop.xsd
    http://www.springframework.org/schema/tx 
    http://www.springframework.org/schema/tx/spring-tx.xsd">
    
    <!-- 配置数据源 -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <!-- MySQL数据库驱动 -->
            <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
            <!-- 连接数据库的URL -->
            <property name="url" value="jdbc:mysql://localhost:3306/j210901?characterEncoding=utf8"/>
            <!-- 连接数据库的用户名 -->
            <property name="username" value="root"/>
            <!-- 连接数据库的密码 -->
            <property name="password" value="1234"/>
      </bean>
      <!-- 配置JDBC模板 -->
      <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
            <property name="dataSource" ref="dataSource"/>
      </bean>
        
    
    
    <!-- 控制层 -->
    <bean id="loginController" class="com.controller.LoginController">
        <!-- property 标签 是做 类中的 属性注入 name对应类中的 属性名字,ref对应 id一致的bean -->
        <property name="loginService"  ref="loginService"></property>
    </bean>
    <!-- 业务层 -->
    <bean id="loginService" class="com.service.imp.LoginServiceImp">
        <!-- property 标签 是做 类中的 属性注入  -->
        <property name="loginDao" ref="loginDao"></property>
    </bean>
    <!-- 持久层 -->
    <bean id="loginDao" class="com.dao.imp.LoginDaoImp">
        <property name="jdbcTemplate" ref="jdbcTemplate"></property>
    </bean>
    
    
        <!--    
            execution(): 表达式主体。
            第一个*号:表示返回类型,*号表示所有的类型。
            包名:表示需要拦截的包名,后面的两个句点表示当前包和当前包的所有子包,com.hopu.service.impl包、子孙包下所有类的方法,*号表示所有的类。
            *(..):最后这个星号表示方法名,*号表示所有的方法,后面括弧里面表示方法的参数,两个句点表示任何参数。
            -->
    <bean id= "myAspect" class="com.aspect.MyAspect"> </bean>
    <aop:config proxy-target-class="true">
        <aop:pointcut expression="execution(* com.service.imp.*.*(..))" id="pointcut"/>
        <aop:aspect id="myAspect"  ref="myAspect">
                <!-- method属性对应的是方法名字-->
                <aop:before method="before" pointcut-ref="pointcut"/>
                <aop:after method="before" pointcut-ref="pointcut"/>
                 
                <aop:around method="aroundTest" pointcut-ref="pointcut"/>
        </aop:aspect>
        <!-- <aop:advisor advice-ref="advice" pointcut-ref="pointcut"/> -->
    </aop:config>
​
</beans>

第三步

根据配置文件初始化 bean。

根据bean的class去读取对应的类,使用反射来把对应的类实现。

newInstance();

第四步

把实例化之后的对象,存入循环存入对应的容器之中。

接着把对应的属性注入进对应的bean的属性之中。

补充

中间使用了AOP,根据对应的配置执行了动态代理,把配置内容对应的类和方法交给了代理来管理。

第五步

调用对应的bean。

LoginController lc = (LoginController) ac.getBean("loginController");

第六步

拿到返回值。

System.out.println(lc.login());

补充

拿值的过程中中间被代理管理的部分,执行了代理这就是AOP的切面部分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值