前書き
Rod Johnson(Springの父)は、2017年9月にSpring Spring 5.0 General Edition(GA)の最新バージョンをリリースしました。Springは、IoC(Inverse Of Control)とAOP(Aspect Oriented Programming)をコアとする、階層化されたJava SE / EEアプリケーションフルスタックの軽量オープンソースフレームワークです。プレゼンテーションレイヤー(SpringMVC)、永続化レイヤー(pring JDBCTemplate)、ビジネスレイヤートランザクション管理など、多くのエンタープライズレベルのアプリケーションテクノロジーを提供します。また、オープンソースの世界でよく知られたサードパーティのフレームワークやクラスライブラリを統合し、徐々に最も使用されるJava EEエンタープライズになります。オープンソースフレームワークを適用してください!
特徴
1.分離を促進し、開発を簡素化する
Springが提供するIOCコンテナーを使用すると、Springはオブジェクト間の依存関係を制御して、ハードコーディングによる過剰な結合を回避できます。ユーザーは、シングルトンパターンクラスやプロパティファイル分析などの低レベルの要件に対応するコードを記述する必要がなくなり、より高レベルのアプリケーションに集中できます。
2. AOPプログラミングのサポート
SpringのAOP関数はアスペクト指向プログラミングを容易にし、従来のOOPで実装するのが容易ではない多くの関数は、AOPを使用して簡単に実装できます。
3.宣言的なトランザクションのサポート
単調で退屈なトランザクション管理コードから解放され、宣言的な方法でトランザクション管理を柔軟に実行して、開発の効率と品質を向上させることができます。
4.プログラムのテストに便利
ほとんどすべてのテスト作業は、コンテナに依存しないプログラミング方法で実行できます。テストはもはや高価な操作ではなく、手元で実行できるものです。
5.さまざまな優れたフレームワークの便利な統合
Springは、さまざまな優れたフレームワーク(Struts、Hibernate、Hessian、Quartzなど)をサポートしています。
6. JavaEE APIの使用の難しさを減らす
Springには、JavaEE API(JDBC、JavaMail、リモート呼び出しなど)用の薄いカプセル化レイヤーがあり、これらのAPIの使用の難しさが大幅に軽減されています。
7. Javaソースコードは古典的な学習パラダイムです
Springのソースコードデザインは精巧で、構造が明確で、独創的な工夫が凝らされており、マスターの柔軟なJavaデザインパターンの使用とJavaテクノロジーの高度な知識を反映しています。そのソースコードは、Javaテクノロジの良い実践例となることを意図していません。
2つのコア機能
IOC(制御の反転)
1.Bean标签范围配置
singleton 默认值,单例的
prototype 多例的
request WEB项目中,Spring创建一个 Bean 的对象,将对象存入到 request 域中
session WEB项目中,Spring创建一个 Bean 的对象,将对象存入到 session 域中
global session WEB项目中,应用在 Portlet环境,如果没有 Portlet 环境那么globalSession
2.当scope的取值为singleton时
Bean的实例化个数:1个
Bean的实例化时机:当Spring核心文件被加载时,实例化配置的Bean实例
Bean的生命周期:
对象创建:当应用加载,创建容器时,对象就被创建了
对象运行:只要容器在,对象一直活着
对象销毁:当应用卸载,销毁容器时,对象就被销毁了
3.当scope的取值为prototype时
Bean的实例化个数:多个
Bean的实例化时机:当调用getBean()方法时实例化Bean
Bean的生命周期:
对象创建:当使用对象时,创建新的对象实例
对象运行:只要对象在使用中,就一直活着
对象销毁:当对象长时间不用时,被 Java 的垃圾回收器回收了
4.Bean的三种实例化方式
1) 使用无参构造方法实例化
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
---
2) 工厂静态方法实例化
public class StaticFactoryBean {
public static UserDao createUserDao(){
return new UserDaoImpl();
}
}
---
<bean id="userDao" class="com.itheima.factory.StaticFactoryBean" factory-method="createUserDao" />
3) 工厂实例方法实例化
public class DynamicFactoryBean {
public UserDao createUserDao(){
return new UserDaoImpl();
}
}
---
<bean id="factoryBean" class="com.itheima.factory.DynamicFactoryBean"/>
<bean id="userDao" factory-bean="factoryBean" factory-method="createUserDao"/>
5.Bean的依赖注入的数据类型
1) 普通数据类型
2) 引用数据类型
3) 集合数据类型
6.引入其他配置文件 <import resource="applicationContext-xxx.xml"/>
7.ApplicationContext的继承体系(spring相关API)
1)ClassPathXmlApplicationContext 它是从类的根路径下加载配置文件 推荐使用这种
2)FileSystemXmlApplicationContext 它是从磁盘路径上加载配置文件,配置文件可以在磁盘的任意位置。
3)AnnotationConfigApplicationContext 当使用注解配置容器对象时,需要使用此类来创建 spring 容器。它用来读取注解。
8.注解开发
@Configuration 声明该类是核心配置类,容器创建时从该类上加载注解
@ComponentScan 注解扫描
@Bean 实例化对象
@PropertySource 加载配置资源
@Import 引入资源
@Component 实例化bean
@Controller web层实例化bean
@Service service层实例化bean
@Repository dao层实例化bean
@Autowired 依赖注入
@Qualifier 结合@Autowired一起使用用于根据名称进行依赖注入
注意:
使用注解进行开发时,需要在applicationContext.xml中配置组件扫描,作用是指定哪个包及其子包下的Bean需要
进行扫描以便识别使用注解配置的类、字段和方法。
AOP(アスペクト指向プログラミング)
前書き
AOPはアスペクト指向プログラミングの略で、アスペクト指向プログラミングを意味し、プリコンパイルエージェントとランタイムダイナミックエージェントを介してプログラム機能の統一されたメンテナンスを実現するテクノロジーです。
効果
プログラムの実行中に、ソースコードを変更せずにメソッドが拡張されます
利点
反復的なコードを減らし、開発効率を向上させ、メンテナンスを容易にします
低レベルの実装
AOPの最下層は、Springが提供する動的プロキシー技術によって実現されます。動作中、Springは動的プロキシテクノロジーを通じてプロキシオブジェクトを動的に生成し、プロキシオブジェクトメソッドが実行されると、拡張された関数が関与し、ターゲットオブジェクトのメソッドが呼び出されて、関数の拡張が完了します。
JDKエージェント:インターフェース
cglibエージェントに基づく動的エージェント技術:親クラスに基づく動的エージェント技術
一般的な用語
- Target(目标对象):代理的目标对象
- Proxy (代理):一个类被 AOP 织入增强后,就产生一个结果代理类
- Joinpoint(连接点):所谓连接点是指那些被拦截到的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点
- Pointcut(切入点):所谓切入点是指我们要对哪些 Joinpoint 进行拦截的定义
- Advice(通知/ 增强):所谓通知是指拦截到 Joinpoint 之后所要做的事情就是通知
- Aspect(切面):是切入点和通知(引介)的结合
- Weaving(织入):是指把增强应用到目标对象来创建新的代理对象的过程。spring采用动态代理织入,而AspectJ采用编译期织入和类装载期织入
開発ステップ
①导入 AOP 相关坐标(aspectlweaver)
②创建目标接口和目标类(内部有切点)
③创建切面类(内部有增强方法)
④将目标类和切面类的对象创建权交给 spring
⑤在 applicationContext.xml 中配置织入关系
⑥测试代码
カットポイント式
execution([修饰符] 返回值类型 包名.类名.方法名(参数))
例如:
execution(public void com.aop.Target.method())
execution(void com.aop.Target.*(..))
execution(* com.aop.*.*(..))
execution(* com.aop..*.*(..))
execution(* *..*.*(..))
質問や意見がありましたら、メッセージを残して一緒に交換してください。ブロガーは、それを見るとすぐに返信します...