当前位置: 首页> 健康> 美食 > 网页qq属于什么_绍兴网站制作推广_站长工具一区_年轻人不要做网络销售

网页qq属于什么_绍兴网站制作推广_站长工具一区_年轻人不要做网络销售

时间:2025/7/9 13:11:38来源:https://blog.csdn.net/nice66660/article/details/144140737 浏览次数:0次
网页qq属于什么_绍兴网站制作推广_站长工具一区_年轻人不要做网络销售

Spring

1.Spring概述

Spring 是最受欢迎的企业级 Java 应用程序开发框架,数以百万的来自世界各地的开发人员使用 Spring 框架来创建性能好、易于测试、可重用的代码。 Spring 框架是一个开源的 Java 平台,它最初是由 Rod Johnson 编写的,并且于 2003 年 6 月首次在 Apache 2.0 许可下发布。 Spring 是轻量级的框架,其基础版本只有 2 MB 左右的大小。 Spring 框架的核心特性是可以用于开发任何 Java 应用程序,但是在 Java EE 平台上构建 web 应用程序 是需要扩展的。 Spring 框架的目标是使 J2EE 开发变得更容易使用,通过启用基于 POJO 编程模型来促 进良好的编程实践。 Spring三大核心容器:Beans,Core,Context Spring中两大核心技术,ICO(控制反转/依赖注入),AOP(面向切面编程)

2.Spring框架核心特性包括:

IoC容器:Spring通过控制反转实现了对象的创建和对象间的依赖关系管理。开发者只需要定义好Bean及其依赖关系,Spring容器负责创建和组装这些对象。
AOP:面向切面编程,允许开发者定义横切关注点,例如事务管理、安全控制等,独立于业务逻辑的代码。通过AOP,可以将这些关注点模块化,提高代码的可维护性和可重用性。
事务管理:Spring提供了一致的事务管理接口,支持声明式和编程式事务。开发者可以轻松地进行事务管理,而无需关心具体的事务API。
MVC框架:Spring MVC是一个基于Servlet API构建的Web框架,采用了模型-视图-控制器(MVC)架构。

3.Spring IoC

IoC:即控制反转的意思,它是一种创建和获取对象的技术思想,依赖注入(DI)是实现这种技术的一种方式。传统开发过程中,我们需要通过new关键字来创建对象。使用IoC思想开发方式的话,我们不通过new关键字创建对象,而是通过IoC容器来帮我们实例化对象。 通过IoC的方式,可以大大降低对象之间的耦合度。

3.1控制反转(其实就是把new对象放到了配置文件里)
将组件对象的控制权从代码本身转移到外部容器
组件化的思想:分离关注点,使用接口,不再关注实现
依赖的注入:将组件的构建和使用分开

实体类

 public class HelloWorld {private String message;public void show(){System.out.println(message);}public void setMessage(String message) {this.message = message;}

创建xml配置文件引入头部,然后使用bean创建对象HelloWorld并参数赋值message

   <bean id="helloWorld" class="com.hz.pojo.HelloWorld"><property name="message" value="Hello World!"/></bean>
注意:
相当于创建对象  
helloWorld = new HelloWorld();
helloWorld.setMassage("Hello World!");

读取配置文件并运行

//使用ClassPathXmlApplicationContext读取配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("spring
.xml");
//使用getBean("bean中ID属性值")获取对象
HelloWorld helloWorld = (HelloWorld) context.getBean("helloWorld");
helloWorld.show();
3.2依赖注入

指 Spring 创建对象的过程中,将对象依赖属性(简单值,集合,对象)通过配置设值给该对象

3.3Spring IOC常用注解
@Component:实现Bean组件的定义
@Repository([实例化名称]) :用于标注DAO类
@Service([实例化名称]) :用于标注业务类
@Controller :用于标注控制器类
@Autowired+@Qualifier("userDao")等价于@Resource(name = "userDao")

使用注解前需先开启注解

<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/contexthttp://www.springframework.org/schema/context/spring-context-3.2.xsd"><!-- 扫描包中注解标注的类 --><context:component-scan base-package="service,dao" />

@Autowired@Resource 都是用于依赖注入(Dependency Injection, DI)注解,它们在 Spring 框架中被用来自动装配依赖的对象。不过,它们在使用和功能上有一些不同,主要体现在以下几个方面:

1. 来源与功能
  • @Autowired
    @Autowired 是 Spring Framework 提供的注解,主要用于自动装配依赖对象。它会通过类型(byType)来自动注入所需的 Bean。如果 Spring 上下文中存在多个候选 Bean,则会根据 Bean 的名称或其他特性进一步选择正确的 Bean。
  • @Resource
    @Resource 是 Java EE 中的注解,属于 JSR-250 规范的一部分。它主要是根据名称(byName)来注入依赖对象。如果找不到指定名称的 Bean,则会根据类型进行注入。
2. 注入方式
  • @Autowired
    默认情况下,@Autowired 是根据 类型 来注入 Bean 的。如果找到多个类型匹配的 Bean,可以使用 @Qualifier 注解进一步明确指定注入哪一个 Bean。

    示例:

    java
    
@Autowired
private MyService myService;

如果有多个 MyService 类型的 Bean,那么 Spring 会根据 Bean 的名称和类型来决定注入哪个 Bean。

你也可以使用 @Autowired@Qualifier 配合来指定具体注入哪个 Bean:

java
@Autowired
@Qualifier("myServiceImpl")
private MyService myService;

@Resource
@Resource 默认根据 名称 来注入 Bean。它会尝试匹配 Bean 的名称和成员变量的名称,如果没有找到合适的 Bean 名称,则会退回到根据 类型 来注入。

示例:

java
@Resource
private MyService myService;

在这里,@Resource 会尝试寻找名为 myService 的 Bean,若存在则注入,如果不存在,才会通过类型匹配。

4.Spring AOP

AOP:是面向切面编程,能够将那些与业务无关,却被业务模块所共同调用的逻辑封装起来,以减少系统的重复代码,降低模块间的耦合度。(例如事务处理、日志管理、权限控制等)Spring AOP 就是基于动态代理的,如果要代理的对象,实现了某个接口,那么 Spring AOP 会使用 JDK Proxy,去创建代理对象,而对于没有实现接口的对象,这时候 Spring AOP 会使用 Cglib 生成一个被代理对象的子类来作为代理。

如果说 IoC 是 Spring 的核心,那么面向切面编程就是 Spring 最为重要的功能之一了,在数据库事务中 切面编程被广泛使用。 AOP 即 Aspect Oriented Program 面向切面编程(公共功能集中解决)

AOP 当中的概念:

切入点(Pointcut: 在哪些类,哪些方法上切入(where)
通知(Advice: 在方法执行的什么实际(when:方法前/方法后/方法前后)做什么(what:增强
的功能)
切面(Aspect: 切面 = 切入点 + 通知,通俗点就是:在什么时机,什么地方,做什么增强!
织入(Weaving: 把切面加入到对象,并创建出代理对象的过程。(由 Spring 来完成)
4.1五种增强方式:

在这里插入图片描述

创建目标方法:

public class UserServiceImpl {//…省略代码 public void addNewUser() {......}
}

创建增强处理类UserServiceLogger

<!--使用joinPrint需要引入包 ,另外还需引入log4j包-->
<dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.5</version>
</dependency>
public class UserServiceLogger {//用于打印日志信息private static Logger log=Logger.getLogger(UserServiceLogger.class);public void before(JoinPoint jp) {log.info("调用 " + jp.getTarget() + " 的 " + jp.getSignature().getName() + " 方法。方法入参:" + Arrays.toString(jp.getArgs()));}public void afterReturning(JoinPoint jp, Object result) {log.info("调用 " + jp.getTarget() + " 的 " +  jp.getSignature().getName() + " 方法。方法返回值:" + result);}
}

引入xml头部

xmlns:aop="http://www.springframework.org/schema/aop"
http://www.springframework.org/schema/aop 
http://www.springframework.org/schema/aop/spring-aop.xsd<aop:config><!--定义切入点--><aop:pointcut id="pointcut" expression="execution(public void show())"/><!--织入增强处理--><aop:aspect ref="serviceLogger"><!--使用前置增强,将切入点与before方法绑定--><aop:before method="before"pointcut-ref="pointcut"></aop:before><!--使用后置增强,将切入点与before方法绑定 returning 返回参数接收--><aop:after-returning method="afterReturning"pointcut-ref="pointcut" returning="result"/></aop:aspect></aop:config>execution表达式匹配规则:
public * addNewUser(entity.User): “*”表示匹配所有类型的返回值。
public void *(entity.User): “*”表示匹配所有方法名。
public void addNewUser(..): “..”表示匹配所有参数个数和类型。
* com.service.*.*(..):匹配com.service包下所有类的所有方法。
* com.service..*.*(..):匹配com.service包及其子包下所有类的所有方法

AOP注解 开启注解

<aop:aspectj-autoproxy>
**/*** 使用注解定义切面*/
@Aspect
@Component
public class UserServiceLogger {private static final Logger log = Logger.getLogger(UserServiceLogger.class);@Pointcut("execution(* service.UserService.*(..))")public void pointcut() {}@Before("pointcut()")public void before(JoinPoint jp) {log.info("调用 " + jp.getTarget() + " 的 " + jp.getSignature().getName()+ " 方法。方法入参:" + Arrays.toString(jp.getArgs()));}@AfterReturning(pointcut = "pointcut()", returning = "returnValue")public void afterReturning(JoinPoint jp, Object returnValue) {log.info("调用 " + jp.getTarget() + " 的 " + jp.getSignature().getName()+ " 方法。方法返回值:" + returnValue);}
}

AOP事务处理

导入tx和aop命名空间

定义事务管理器DataSourceTransactionManager并为其注入数据源Bean

<!--定义事务采用JDBC管理事务--><bean id="transactionManager" 
class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean>
<tx:advice id="txAdvice"><tx:attributes><tx:method name="find*" propagation="SUPPORTS" /><tx:method name="add*" propagation="REQUIRED" /><tx:method name="del*" propagation="REQUIRED" /><tx:method name="update*" propagation="REQUIRED" /><tx:method name="*" propagation="REQUIRED" /></tx:attributes></tx:advice>
<!-- 定义切面 -->
<aop:config><aop:pointcut id="serviceMethod"expression="execution(* com.hz.service..*.*(..))" /><aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod" />
</aop:config> 
4.2AOP实现注解
常用的注解包括:@Aspect:用于定义切面,标注在切面类上。@Pointcut:定义切点,标注在方法上,用于指定连接点。@Before:在方法执行之前执行通知。@After:在方法执行之后执行通知。@Around:在方法执行前后都执行通知。@AfterReturning:在方法执行后返回结果后执行通知。@AfterThrowing:在方法抛出异常后执行通知。@Advice:通用的通知类型,可以替代@Before@After等。

5.Spring的处理流程

用户发送请求至前端控制器DispatcherServlet
DispatcherServlet收到请求调用处理器映射器HandlerMapping。
处理器映射器根据请求url找到具体的处理器,生成处理器执行链HandlerExecutionChain(包括处理器对象和处理器拦截器)一并返回给DispatcherServlet。
DispatcherServlet根据处理器Handler获取处理器适配器HandlerAdapter执行HandlerAdapter处理一系列的操作,如:参数封装,数据格式转换,数据验证等操作
执行处理器Handler(Controller,也叫页面控制器)。
Handler执行完成返回ModelAndView
HandlerAdapter将Handler执行结果ModelAndView返回到DispatcherServlet
DispatcherServlet将ModelAndView传给ViewReslover视图解析器
ViewReslover解析后返回具体View
DispatcherServlet对View进行渲染视图(即将模型数据model填充至视图中)。
DispatcherServlet响应用户。

关键字:网页qq属于什么_绍兴网站制作推广_站长工具一区_年轻人不要做网络销售

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: