CodeGym /ื‘ืœื•ื’ Java /Random-HE /ืžื” ื–ื” AOP? ืขืงืจื•ื ื•ืช ืฉืœ ืชื›ื ื•ืช ืžื•ื ื—ื” ื”ื™ื‘ื˜ื™ื
John Squirrels
ืจึธืžึธื”
San Francisco

ืžื” ื–ื” AOP? ืขืงืจื•ื ื•ืช ืฉืœ ืชื›ื ื•ืช ืžื•ื ื—ื” ื”ื™ื‘ื˜ื™ื

ืคื•ืจืกื ื‘ืงื‘ื•ืฆื”
ื”ื™ื™, ื—ื‘ืจ'ื” ื•ื‘ื ื•ืช! ื‘ืœื™ ืœื”ื‘ื™ืŸ ืืช ื”ืžื•ืฉื’ื™ื ื”ื‘ืกื™ืกื™ื™ื, ื“ื™ ืงืฉื” ืœื”ืชืขืžืง ื‘ืžืกื’ืจื•ืช ื•ื‘ื’ื™ืฉื•ืช ืœื‘ื ื™ื™ืช ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช. ืื– ื”ื™ื•ื ื ื“ื‘ืจ ืขืœ ืžื•ืฉื’ ืื—ื“ ื›ื–ื” - AOP, ื”ืœื ื”ื•ื ืชื›ื ื•ืช ืžื•ื ื—ื” ื”ื™ื‘ื˜ื™ื . ืžื” ื–ื” AOP?  ืขืงืจื•ื ื•ืช ืฉืœ ืชื›ื ื•ืช ืžื•ื ื—ื” ื”ื™ื‘ื˜ื™ื - 1ื ื•ืฉื ื–ื” ืื™ื ื• ืงืœ ื•ืœืขืชื™ื ืจื—ื•ืงื•ืช ื ืขืฉื” ื‘ื• ืฉื™ืžื•ืฉ ื™ืฉื™ืจ, ืืš ืžืกื’ืจื•ืช ื•ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ืจื‘ื•ืช ืžืฉืชืžืฉื•ืช ื‘ื• ืžืชื—ืช ืœืžื›ืกื” ื”ืžื ื•ืข. ื•ื›ืžื•ื‘ืŸ, ืœืคืขืžื™ื ื‘ืžื”ืœืš ืจืื™ื•ื ื•ืช, ื™ื™ืชื›ืŸ ืฉืชืชื‘ืงืฉื• ืœืชืืจ ื‘ืื•ืคืŸ ื›ืœืœื™ ืื™ื–ื• ืžื™ืŸ ื—ื™ื” ื–ื• ื•ื”ื™ื›ืŸ ื ื™ืชืŸ ืœื™ื™ืฉื ืื•ืชื”. ืื– ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ื”ืžื•ืฉื’ื™ื ื”ื‘ืกื™ืกื™ื™ื ื•ื›ืžื” ื“ื•ื’ืžืื•ืช ืคืฉื•ื˜ื•ืช ืฉืœ AOP ื‘-Java . ื›ืขืช, AOP ืžื™ื™ืฆื’ ืชื›ื ื•ืช ืžื•ื ื—ื” ื”ื™ื‘ื˜ , ืฉื”ื™ื ืคืจื“ื™ื’ืžื” ืฉื ื•ืขื“ื” ืœื”ื’ื‘ื™ืจ ืืช ื”ืžื•ื“ื•ืœืจื™ื•ืช ืฉืœ ื”ื—ืœืงื™ื ื”ืฉื•ื ื™ื ืฉืœ ื™ื™ืฉื•ื ืขืœ ื™ื“ื™ ื”ืคืจื“ืช ื—ืฉืฉื•ืช ืจื•ื—ื‘ื™ื™ื. ื›ื“ื™ ืœื”ืฉื™ื’ ื–ืืช, ื”ืชื ื”ื’ื•ืช ื ื•ืกืคืช ืžืชื•ื•ืกืคืช ืœืงื•ื“ ื”ืงื™ื™ื ืžื‘ืœื™ ืœื‘ืฆืข ืฉื™ื ื•ื™ื™ื ื‘ืงื•ื“ ื”ืžืงื•ืจื™. ื‘ืžื™ืœื™ื ืื—ืจื•ืช, ืื ื• ื™ื›ื•ืœื™ื ืœื—ืฉื•ื‘ ืขืœ ื–ื” ื›ืชืœื™ื™ืช ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื ื•ืกืคืช ืขืœ ื’ื‘ื™ ืฉื™ื˜ื•ืช ื•ืžื—ืœืงื•ืช ืžื‘ืœื™ ืœืฉื ื•ืช ืืช ื”ืงื•ื“ ืฉื”ืฉืชื ื”. ืœืžื” ื–ื” ื ื—ื•ืฅ? ื‘ืžื•ืงื“ื ืื• ื‘ืžืื•ื—ืจ, ืื ื• ืžืกื™ืงื™ื ืฉื’ื™ืฉื” ื˜ื™ืคื•ืกื™ืช ืžื•ื ื—ื” ืขืฆืžื™ื ืœื ืชืžื™ื“ ื™ื›ื•ืœื” ืœืคืชื•ืจ ื‘ื™ืขื™ืœื•ืช ื‘ืขื™ื•ืช ืžืกื•ื™ืžื•ืช. ื•ื›ืฉื”ืจื’ืข ื”ื–ื” ืžื’ื™ืข, AOP ื ื—ืœืฆืช ืœืขื–ืจื” ื•ื ื•ืชื ืช ืœื ื• ื›ืœื™ื ื ื•ืกืคื™ื ืœื‘ื ื™ื™ืช ืืคืœื™ืงืฆื™ื•ืช. ื•ื›ืœื™ื ื ื•ืกืคื™ื ืคื™ืจื•ืฉื ื’ืžื™ืฉื•ืช ืžื•ื’ื‘ืจืช ื‘ืคื™ืชื•ื— ืชื•ื›ื ื”, ื›ืœื•ืžืจ ืืคืฉืจื•ื™ื•ืช ืจื‘ื•ืช ื™ื•ืชืจ ืœืคืชืจื•ืŸ ื‘ืขื™ื” ืžืกื•ื™ืžืช.

ื”ื—ืœืช AOP

ืชื›ื ื•ืช ืžื•ื ื—ื” ื”ื™ื‘ื˜ื™ื ื ื•ืขื“ ืœื‘ืฆืข ืžืฉื™ืžื•ืช ืฆื•ืœื‘ื•ืช, ืฉื™ื›ื•ืœื•ืช ืœื”ื™ื•ืช ื›ืœ ืงื•ื“ ืฉืขืœื•ืœ ืœื—ื–ื•ืจ ืขืœ ืขืฆืžื• ืคืขืžื™ื ืจื‘ื•ืช ื‘ืฉื™ื˜ื•ืช ืฉื•ื ื•ืช, ืฉืœื ื ื™ืชืŸ ืœื‘ื ื•ืช ืœื—ืœื•ื˜ื™ืŸ ื‘ืžื•ื“ื•ืœ ื ืคืจื“. ื‘ื”ืชืื ืœื›ืš, AOP ืžืืคืฉืจ ืœื ื• ืœืฉืžื•ืจ ืืช ื–ื” ืžื—ื•ืฅ ืœืงื•ื“ ื”ืจืืฉื™ ื•ืœื”ื›ืจื™ื– ืขืœ ื›ืš ื‘ืฆื•ืจื” ืื ื›ื™ืช. ื“ื•ื’ืžื” ืœื›ืš ื”ื™ื ืฉื™ืžื•ืฉ ื‘ืžื“ื™ื ื™ื•ืช ืื‘ื˜ื—ื” ื‘ืืคืœื™ืงืฆื™ื”. ื‘ื“ืจืš ื›ืœืœ, ืื‘ื˜ื—ื” ืขื•ื‘ืจืช ื“ืจืš ืืœืžื ื˜ื™ื ืจื‘ื™ื ืฉืœ ื™ื™ืฉื•ื. ื™ืชืจื” ืžื›ืš, ืžื“ื™ื ื™ื•ืช ื”ืื‘ื˜ื—ื” ืฉืœ ื”ืืคืœื™ืงืฆื™ื” ืฆืจื™ื›ื” ืœื”ื™ื•ืช ืžื™ื•ืฉืžืช ื‘ืื•ืคืŸ ืฉื•ื•ื” ืขืœ ื›ืœ ื”ื—ืœืงื™ื ื”ืงื™ื™ืžื™ื ื•ื”ื—ื“ืฉื™ื ืฉืœ ื”ืืคืœื™ืงืฆื™ื”. ื‘ืžืงื‘ื™ืœ, ืžื“ื™ื ื™ื•ืช ืื‘ื˜ื—ื” ื‘ืฉื™ืžื•ืฉ ื™ื›ื•ืœื” ืœื”ืชืคืชื— ื‘ืขืฆืžื”. ื–ื” ื”ืžืงื•ื ื”ืžื•ืฉืœื ืœื”ืฉืชืžืฉ ื‘-AOP . ื›ืžื• ื›ืŸ, ื“ื•ื’ืžื” ื ื•ืกืคืช ื”ื™ื ืจื™ืฉื•ื . ื™ืฉื ื ืžืกืคืจ ื™ืชืจื•ื ื•ืช ืœืฉื™ืžื•ืฉ ื‘ื’ื™ืฉืช AOP ืœืจื™ืฉื•ื ื•ืœื ื‘ื”ื•ืกืคืช ืคื•ื ืงืฆื™ื•ื ืœื™ ืจื™ืฉื•ื ื™ื“ื ื™ืช:
  1. ืงืœ ืœื”ื•ืกื™ืฃ ื•ืœื”ืกื™ืจ ืืช ื”ืงื•ื“ ืœืจื™ืฉื•ื: ื›ืœ ืžื” ืฉืืชื” ืฆืจื™ืš ืœืขืฉื•ืช ื”ื•ื ืœื”ื•ืกื™ืฃ ืื• ืœื”ืกื™ืจ ื›ืžื” ืชืฆื•ืจื•ืช ืฉืœ ื”ื™ื‘ื˜ ื›ืœืฉื”ื•.

  2. ื›ืœ ืงื•ื“ ื”ืžืงื•ืจ ืœืจื™ืฉื•ื ื ืฉืžืจ ื‘ืžืงื•ื ืื—ื“, ื›ืš ืฉืœื ืชืฆื˜ืจืš ืœื—ืคืฉ ื™ื“ื ื™ืช ืืช ื›ืœ ื”ืžืงื•ืžื•ืช ืฉื‘ื”ื ื ืขืฉื” ื‘ื• ืฉื™ืžื•ืฉ.

  3. ื ื™ืชืŸ ืœื”ื•ืกื™ืฃ ืงื•ื“ ืจื™ืฉื•ื ื‘ื›ืœ ืžืงื•ื, ื‘ื™ืŸ ืื ื‘ืฉื™ื˜ื•ืช ื•ืžื—ืœืงื•ืช ืฉื›ื‘ืจ ื ื›ืชื‘ื• ื•ื‘ื™ืŸ ืื ื‘ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื—ื“ืฉื”. ื–ื” ืžืงื˜ื™ืŸ ืืช ืžืกืคืจ ืฉื’ื™ืื•ืช ื”ืงื™ื“ื•ื“.

    ื›ืžื• ื›ืŸ, ื‘ืขืช ื”ืกืจืช ื”ื™ื‘ื˜ ืžืชืฆื•ืจืช ืขื™ืฆื•ื‘, ืืชื” ื™ื›ื•ืœ ืœื”ื™ื•ืช ื‘ื˜ื•ื— ืฉื›ืœ ืงื•ื“ ื”ืžืขืงื‘ ื ืขืœื ื•ืฉืฉื•ื ื“ื‘ืจ ืœื ื”ื•ื—ืžืฆ.

  4. ื”ื™ื‘ื˜ื™ื ื”ื ืงื•ื“ ื ืคืจื“ ืฉื ื™ืชืŸ ืœืฉืคืจ ื•ืœื”ืฉืชืžืฉ ื‘ื• ืฉื•ื‘ ื•ืฉื•ื‘.
ืžื” ื–ื” AOP?  ืขืงืจื•ื ื•ืช ืฉืœ ืชื›ื ื•ืช ืžื•ื ื—ื” ื”ื™ื‘ื˜ื™ื - 2AOP ืžืฉืžืฉ ื’ื ืœื˜ื™ืคื•ืœ ื‘ื—ืจื™ื’ื™ื, ืฉืžื™ืจื” ื‘ืžื˜ืžื•ืŸ ื•ื—ื™ืœื•ืฅ ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืžืกื•ื™ืžืช ื›ื“ื™ ืœื”ืคื•ืš ืื•ืชื• ืœืฉื™ืžื•ืฉ ื—ื•ื–ืจ.

ืขืงืจื•ื ื•ืช ื‘ืกื™ืกื™ื™ื ืฉืœ AOP

ื›ื“ื™ ืœื”ืชืงื“ื ื‘ื ื•ืฉื ื–ื”, ื‘ื•ืื• ื ื›ื™ืจ ืชื—ื™ืœื” ืืช ื”ืžื•ืฉื’ื™ื ื”ืขื™ืงืจื™ื™ื ืฉืœ AOP. ืขืฆื” - ื”ื’ื™ื•ืŸ ื ื•ืกืฃ ืื• ืงื•ื“ ืฉื ืงืจื ืžื ืงื•ื“ืช ื”ืฆื˜ืจืคื•ืช. ื ื™ืชืŸ ืœื‘ืฆืข ื™ื™ืขื•ืฅ ืœืคื ื™, ืื—ืจื™ ืื• ื‘ืžืงื•ื ื ืงื•ื“ืช ื”ืฆื˜ืจืคื•ืช (ืขื•ื“ ืขืœื™ื”ื ื‘ื”ืžืฉืš). ืกื•ื’ื™ ืขืฆื•ืช ืืคืฉืจื™ื•ืช :
  1. ืœืคื ื™ - ื™ื™ืขื•ืฅ ืžืกื•ื’ ื–ื” ืžื•ืคืขืœ ืœืคื ื™ ื‘ื™ืฆื•ืข ืฉื™ื˜ื•ืช ื™ืขื“, ื›ืœื•ืžืจ ื ืงื•ื“ื•ืช ืฆื™ืจื•ืฃ. ื‘ืขืช ืฉื™ืžื•ืฉ ื‘ื”ื™ื‘ื˜ื™ื ื›ืฉื™ืขื•ืจื™ื, ืื ื• ืžืฉืชืžืฉื™ื ื‘ื”ืขืจืช @Before ื›ื“ื™ ืœืกืžืŸ ืืช ื”ืขืฆื” ื›ืžื’ื™ืขื” ืœืคื ื™. ื‘ืขืช ืฉื™ืžื•ืฉ ื‘ืืกืคืงื˜ื™ื ื›ืงื‘ืฆื™ .aj , ื–ื• ืชื”ื™ื” ืฉื™ื˜ืช before() .

  2. ืœืื—ืจ - ืขืฆื” ืฉืžืชื‘ืฆืขืช ืœืื—ืจ ื‘ื™ืฆื•ืข ืฉื™ื˜ื•ืช (ื ืงื•ื“ื•ืช ืฆื™ืจื•ืฃ) ื”ื•ืฉืœืžื”, ื”ืŸ ื‘ื‘ื™ืฆื•ืข ืจื’ื™ืœ ื•ื”ืŸ ื‘ืขืช โ€‹โ€‹ื–ืจื™ืงืช ื—ืจื™ื’ื”.

    ื›ืืฉืจ ืžืฉืชืžืฉื™ื ื‘ื”ื™ื‘ื˜ื™ื ื›ืฉื™ืขื•ืจื™ื, ืื ื• ื™ื›ื•ืœื™ื ืœื”ืฉืชืžืฉ ื‘ื‘ื™ืื•ืจ @After ื›ื“ื™ ืœืฆื™ื™ืŸ ืฉื–ื• ืขืฆื” ืฉืžื’ื™ืขื” ืœืื—ืจ ืžื›ืŸ.

    ื›ืืฉืจ ืžืฉืชืžืฉื™ื ื‘ืืกืคืงื˜ื™ื ื›ืงื‘ืฆื™ .aj , ื–ื•ื”ื™ ืฉื™ื˜ืช after() .

  3. ืœืื—ืจ ื”ื—ื–ืจื” - ืขืฆื” ื–ื• ืžื‘ื•ืฆืขืช ืจืง ื›ืืฉืจ ืฉื™ื˜ืช ื”ื™ืขื“ ืžืกืชื™ื™ืžืช ื›ืจื’ื™ืœ, ืœืœื ืฉื’ื™ืื•ืช.

    ื›ืืฉืจ ื”ื™ื‘ื˜ื™ื ืžื™ื•ืฆื’ื™ื ื›ืฉื™ืขื•ืจื™ื, ืื ื• ื™ื›ื•ืœื™ื ืœื”ืฉืชืžืฉ ื‘ื‘ื™ืื•ืจ @AfterReturning ื›ื“ื™ ืœืกืžืŸ ืืช ื”ืขืฆื” ื›ืžื‘ื•ืฆืขืช ืœืื—ืจ ืกื™ื•ื ืžื•ืฆืœื—.

    ื‘ืขืช ืฉื™ืžื•ืฉ ื‘ืืกืคืงื˜ื™ื ื›ืงื‘ืฆื™ .aj , ื–ื• ืชื”ื™ื” ืฉื™ื˜ืช after() ื”ืžื—ื–ื™ืจื” (Object obj) .

  4. ืœืื—ืจ ื”ืฉืœื›ื” - ืขืฆื” ื–ื• ืžื™ื•ืขื“ืช ืœืžืงืจื™ื ืฉื‘ื”ื ืฉื™ื˜ื”, ื›ืœื•ืžืจ ื ืงื•ื“ืช ื”ืฆื˜ืจืคื•ืช, ื–ื•ืจืงืช ื—ืจื™ื’ื”. ืื ื• ื™ื›ื•ืœื™ื ืœื”ืฉืชืžืฉ ื‘ืขืฆื” ื–ื• ื›ื“ื™ ืœื˜ืคืœ ื‘ืกื•ื’ื™ื ืžืกื•ื™ืžื™ื ืฉืœ ื‘ื™ืฆื•ืข ื›ื•ืฉืœ (ืœื“ื•ื’ืžื”, ืœื‘ื˜ืœ ืขืกืงื” ืฉืœืžื” ืื• ื™ื•ืžืŸ ืจื™ืฉื•ื ืขื ืจืžืช ื”ืžืขืงื‘ ื”ื ื“ืจืฉืช).

    ืขื‘ื•ืจ ื”ื™ื‘ื˜ื™ ื”ื›ื™ืชื”, ื”ื”ืขืจื” @AfterThrowing ืžืฉืžืฉืช ื›ื“ื™ ืœืฆื™ื™ืŸ ืฉื”ืขืฆื” ื”ื–ื• ืžืฉืžืฉืช ืœืื—ืจ ื–ืจื™ืงืช ื—ืจื™ื’ื”.

    ื‘ืขืช ืฉื™ืžื•ืฉ ื‘ืืกืคืงื˜ื™ื ื›ืงื‘ืฆื™ โ€Ž.aj , ื–ื• ืชื”ื™ื” ืฉื™ื˜ืช after() throwing (Exception e) .

  5. ืžืกื‘ื™ื‘ - ืื•ืœื™ ืื—ื“ ืžืกื•ื’ื™ ื”ืขืฆื•ืช ื”ื—ืฉื•ื‘ื™ื ื‘ื™ื•ืชืจ. ื”ื•ื ืžืงื™ืฃ ืฉื™ื˜ื”, ื›ืœื•ืžืจ ื ืงื•ื“ืช ืฆื™ืจื•ืฃ ืฉื‘ื” ื ื•ื›ืœ ืœื”ืฉืชืžืฉ ื›ื“ื™, ืœืžืฉืœ, ืœื‘ื—ื•ืจ ืื ืœื‘ืฆืข ืฉื™ื˜ืช ื ืงื•ื“ืช ืฆื™ืจื•ืฃ ื ืชื•ื ื” ืื• ืœื.

    ืืชื” ื™ื›ื•ืœ ืœื›ืชื•ื‘ ืงื•ื“ ืขืฆื” ืฉืจืฅ ืœืคื ื™ ื•ืื—ืจื™ ื‘ื™ืฆื•ืข ืฉื™ื˜ืช ื”-join point.

    ื”ืขืฆื” ืกื‘ื™ื‘ ืื—ืจืื™ืช ืœืงืจื™ืื” ืœืฉื™ื˜ืช ื”-join point ื•ืœืขืจื›ื™ ื”ื”ื—ื–ืจื” ืื ื”ืฉื™ื˜ื” ืžื—ื–ื™ืจื” ืžืฉื”ื•. ื‘ืžื™ืœื™ื ืื—ืจื•ืช, ื‘ืขืฆื” ื–ื• ืชื•ื›ืœื• ืคืฉื•ื˜ ืœื“ืžื•ืช ืคืขื•ืœืช ืฉื™ื˜ืช ืžื˜ืจื” ืžื‘ืœื™ ืœืงืจื•ื ืœื”, ื•ืœื”ื—ื–ื™ืจ ืžื” ืฉืชืจืฆื• ื›ืชื•ืฆืื” ืžื”ื—ื–ืจื”.

    ื‘ื”ืชื—ืฉื‘ ื‘ื”ื™ื‘ื˜ื™ื ื›ืฉื™ืขื•ืจื™ื, ืื ื• ืžืฉืชืžืฉื™ื ื‘ื‘ื™ืื•ืจ @Around ื›ื“ื™ ืœื™ืฆื•ืจ ืขืฆื•ืช ืฉืขื•ื˜ืคื•ืช ื ืงื•ื“ืช ื”ืฆื˜ืจืคื•ืช. ื‘ืขืช ืฉื™ืžื•ืฉ ื‘ื”ื™ื‘ื˜ื™ื ื‘ืฆื•ืจื” ืฉืœ ืงื‘ืฆื™ .aj , ืฉื™ื˜ื” ื–ื• ืชื”ื™ื” ืฉื™ื˜ืช around() .

Join Point - ื”ื ืงื•ื“ื” ื‘ืชื•ื›ื ื™ืช ืคื•ืขืœืช (ื›ืœื•ืžืจ ืงืจื™ืืช ืฉื™ื˜ื”, ื™ืฆื™ืจืช ืื•ื‘ื™ื™ืงื˜, ื’ื™ืฉื” ืžืฉืชื ื”) ืฉื‘ื” ื™ืฉ ืœื™ื™ืฉื ืืช ื”ืขืฆื”. ื‘ืžื™ืœื™ื ืื—ืจื•ืช, ื–ื”ื• ืกื•ื’ ืฉืœ ื‘ื™ื˜ื•ื™ ืจื’ื•ืœืจื™ ื”ืžืฉืžืฉ ืœืžืฆื™ืืช ืžืงื•ืžื•ืช ืœื”ื–ืจืงืช ืงื•ื“ (ืžืงื•ืžื•ืช ืฉื‘ื”ื ื™ืฉ ืœื™ื™ืฉื ืขืฆื•ืช). Pointcut - ืงื‘ื•ืฆื” ืฉืœ ื ืงื•ื“ื•ืช ืฆื™ืจื•ืฃ . ื—ื™ืชื•ืš ื ืงื•ื“ืชื™ ืงื•ื‘ืข ืื ื”ืขืฆื” ืฉื ื™ืชื ื” ื—ืœื” ืขืœ ื ืงื•ื“ืช ื”ืฆื˜ืจืคื•ืช ื ืชื•ื ื”. Aspect - ืžื•ื“ื•ืœ ืื• ืžื—ืœืงื” ื”ืžื™ื™ืฉืžื™ื ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื—ื•ืฆืชื™ืช. Aspect ืžืฉื ื” ืืช ื”ืชื ื”ื’ื•ืช ื”ืงื•ื“ ื”ื ื•ืชืจ ืขืœ ื™ื“ื™ ื™ื™ืฉื•ื ืขืฆื•ืช ื‘ื ืงื•ื“ื•ืช ื”ืฆื˜ืจืคื•ืช ื”ืžื•ื’ื“ืจื•ืช ืขืœ ื™ื“ื™ ื ืงื•ื“ืช ื—ื™ืชื•ืš ื›ืœืฉื”ื™ . ื‘ืžื™ืœื™ื ืื—ืจื•ืช, ืžื“ื•ื‘ืจ ื‘ืฉื™ืœื•ื‘ ืฉืœ ืขืฆื•ืช ื•ื ืงื•ื“ื•ืช ื”ืฆื˜ืจืคื•ืช. ืžื‘ื•ื - ืฉื™ื ื•ื™ ื”ืžื‘ื ื” ืฉืœ ืžื—ืœืงื” ื•/ืื• ืฉื™ื ื•ื™ ื”ื™ืจืจื›ื™ื™ืช ื”ื™ืจื•ืฉื” ื›ื“ื™ ืœื”ื•ืกื™ืฃ ืืช ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืฉืœ ื”ื”ื™ื‘ื˜ ืœืงื•ื“ ื–ืจ. ื™ืขื“ - ื”ืื•ื‘ื™ื™ืงื˜ ืฉืขืœื™ื• ื™ื•ื—ืœ ื”ืขืฆื”. ืืจื™ื’ื” - ืชื”ืœื™ืš ืฉืœ ืงื™ืฉื•ืจ ื”ื™ื‘ื˜ื™ื ืœืื•ื‘ื™ื™ืงื˜ื™ื ืื—ืจื™ื ื›ื“ื™ ืœื™ืฆื•ืจ ืื•ื‘ื™ื™ืงื˜ื™ ืคืจื•ืงืกื™ ืžื•ืžืœืฆื™ื. ื–ื” ื™ื›ื•ืœ ืœื”ื™ืขืฉื•ืช ื‘ื–ืžืŸ ืงื•ืžืคื™ืœืฆื™ื”, ื–ืžืŸ ื˜ืขื™ื ื” ืื• ื–ืžืŸ ืจื™ืฆื”. ื™ืฉื ื ืฉืœื•ืฉื” ืกื•ื’ื™ ืืจื™ื’ื”:
  • ืืจื™ื’ื” ื‘ื–ืžืŸ ืงื•ืžืคื™ืœืฆื™ื” โ€” ืื ื™ืฉ ืœืš ืืช ืงื•ื“ ื”ืžืงื•ืจ ืฉืœ ื”ื”ื™ื‘ื˜ ื•ืืช ื”ืงื•ื“ ืฉื‘ื• ืืชื” ืžืฉืชืžืฉ ื‘ื”ื™ื‘ื˜, ืื– ืืชื” ื™ื›ื•ืœ ืœืงืžืคืœ ืืช ืงื•ื“ ื”ืžืงื•ืจ ื•ืืช ื”ื”ื™ื‘ื˜ ื™ืฉื™ืจื•ืช ื‘ืืžืฆืขื•ืช ืžื”ื“ืจ AspectJ;

  • ืืจื™ื’ื” ืœืื—ืจ ื”ื™ื“ื•ืจ (ืืจื™ื’ื” ื‘ื™ื ืืจื™ืช) - ืื ืื™ื ืš ื™ื›ื•ืœ ืื• ืจื•ืฆื” ืœื”ืฉืชืžืฉ ื‘ื˜ืจื ืกืคื•ืจืžืฆื™ื•ืช ืฉืœ ืงื•ื“ ืžืงื•ืจ ื›ื“ื™ ืœืืจื•ื’ ื”ื™ื‘ื˜ื™ื ืœืชื•ืš ื”ืงื•ื“, ืืชื” ื™ื›ื•ืœ ืœืงื—ืช ืžื—ืœืงื•ืช ืื• ืงื‘ืฆื™ jar ืฉื”ื™ื“ื•ืจ ืงื•ื“ื ืœื›ืŸ ื•ืœื”ื—ื“ื™ืจ ืœืชื•ื›ื ื”ื™ื‘ื˜ื™ื;

  • ืืจื™ื’ื” ื‘ื–ืžืŸ ื˜ืขื™ื ื” - ื–ื•ื”ื™ ืจืง ืืจื™ื’ื” ื‘ื™ื ืืจื™ืช ืฉืžืชืขื›ื‘ืช ืขื“ ืฉื”-classloader ื™ื˜ืขืŸ ืืช ืงื•ื‘ืฅ ื”ืžื—ืœืงื” ื•ื™ื’ื“ื™ืจ ืืช ื”ืžื—ืœืงื” ืขื‘ื•ืจ ื”-JVM.

    ื ื“ืจืฉ ืื—ื“ ืื• ื™ื•ืชืจ ืžืขืžื™ืกื™ื ืžืกื•ื’ ืืจื™ื’ื” ื›ื“ื™ ืœืชืžื•ืš ื‘ื›ืš. ื”ื ืžืกื•ืคืงื™ื ื‘ืžืคื•ืจืฉ ืขืœ ื™ื“ื™ ื–ืžืŸ ื”ืจื™ืฆื” ืื• ืžื•ืคืขืœื™ื ืขืœ ื™ื“ื™ "ืกื•ื›ืŸ ืืจื™ื’ื”".

AspectJ - ื™ื™ืฉื•ื ืกืคืฆื™ืคื™ ืฉืœ ืคืจื“ื™ื’ืžืช AOP ื”ืžื™ื™ืฉืžืช ืืช ื”ื™ื›ื•ืœืช ืœื‘ืฆืข ืžืฉื™ืžื•ืช ืฆื•ืœื‘ื•ืช. ืืช ื”ืชื™ืขื•ื“ ื ื™ืชืŸ ืœืžืฆื•ื ื›ืืŸ .

ื“ื•ื’ืžืื•ืช ื‘ื’'ืื•ื•ื”

ืœืื—ืจ ืžื›ืŸ, ืœื”ื‘ื ื” ื˜ื•ื‘ื” ื™ื•ืชืจ ืฉืœ AOP , ื ืกืชื›ืœ ืขืœ ื“ื•ื’ืžืื•ืช ืงื˜ื ื•ืช ื‘ืกื’ื ื•ืŸ "Hello World". ืžื™ืžื™ืŸ ืœืžื—ื‘ื˜, ืืฆื™ื™ืŸ ืฉื”ื“ื•ื’ืžืื•ืช ืฉืœื ื• ื™ืฉืชืžืฉื• ื‘ืืจื™ื’ื” ื‘ื–ืžืŸ ื”ื™ื“ื•ืจ . ืจืืฉื™ืช, ืขืœื™ื ื• ืœื”ื•ืกื™ืฃ ืืช ื”ืชืœื•ืช ื”ื‘ืื” ื‘ืงื•ื‘ืฅ pom.xml ืฉืœื ื• :

<dependency>
  <groupId>org.aspectj</groupId>
  <artifactId>aspectjrt</artifactId>
  <version>1.9.5</version>
</dependency>
ื›ื›ืœืœ, ืžื”ื“ืจ ื”-ajc ื”ืžื™ื•ื—ื“ ื”ื•ื ื”ืื•ืคืŸ ืฉื‘ื• ืื ื• ืžืฉืชืžืฉื™ื ื‘ื”ื™ื‘ื˜ื™ื. IntelliJ IDEA ืื™ื ื• ื›ื•ืœืœ ืื•ืชื• ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ื›ืš ืฉื›ืืฉืจ ืืชื” ื‘ื•ื—ืจ ื‘ื• ื›ืงื•ืžืคื™ื™ืœืจ ื”ื™ื™ืฉื•ืžื™ื, ืขืœื™ืš ืœืฆื™ื™ืŸ ืืช ื”ื ืชื™ื‘ ืœื”ืคืฆื” 5168 75 AspectJ . ื–ื• ื”ื™ื™ืชื” ื”ื“ืจืš ื”ืจืืฉื•ื ื”. ื”ืฉื ื™, ืฉื”ื•ื ื–ื” ืฉื”ืฉืชืžืฉืชื™ ื‘ื•, ื”ื•ื ืœืจืฉื•ื ืืช ื”ืชื•ืกืฃ ื”ื‘ื ื‘ืงื•ื‘ืฅ pom.xml :

<build>
  <plugins>
     <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>aspectj-maven-plugin</artifactId>
        <version>1.7</version>
        <configuration>
           <complianceLevel>1.8</complianceLevel>
           <source>1.8</source>
           <target>1.8</target>
           <showWeaveInfo>true</showWeaveInfo>
           <<verbose>true<verbose>
           <Xlint>ignore</Xlint>
           <encoding>UTF-8</encoding>
        </configuration>
        <executions>
           <execution>
              <goals>
                 <goal>compile</goal>
                 <goal>test-compile</goal>
              </goals>
           </execution>
        </executions>
     </plugin>
  </plugins>
</build>
ืœืื—ืจ ืžื›ืŸ, ืžื•ืžืœืฅ ืœื™ื™ื‘ื ืžื—ื“ืฉ ืž- Maven ื•ืœื”ืคืขื™ืœ ืืช mvn clean compile . ื›ืขืช ื ืžืฉื™ืš ื™ืฉื™ืจื•ืช ืœื“ื•ื’ืžืื•ืช.

ื“ื•ื’ืžื” ืžืก' 1

ื‘ื•ืื• ื ื™ืฆื•ืจ ืžื—ืœืงื” ืจืืฉื™ืช . ื‘ื• ืชื”ื™ื” ืœื ื• ื ืงื•ื“ืช ื›ื ื™ืกื” ื•ืฉื™ื˜ื” ืฉืžื“ืคื™ืกื” ืฉื ืขื‘ืจ ื‘ืงื•ื ืกื•ืœื”:

public class Main {
 
  public static void main(String[] args) {
  printName("Tanner");
  printName("Victor");
  printName("Sasha");
  }
 
  public static void printName(String name) {
     System.out.println(name);
  }
}
ืื™ืŸ ื›ืืŸ ืฉื•ื ื“ื‘ืจ ืžืกื•ื‘ืš. ื”ืขื‘ืจื ื• ืฉื ื•ื”ืฆื’ื ื• ืื•ืชื• ื‘ืงื•ื ืกื•ืœื”. ืื ื ืจื™ืฅ ืืช ื”ืชื•ื›ื ื™ืช ื›ืขืช, ื ืจืื” ืืช ื”ื“ื‘ืจื™ื ื”ื‘ืื™ื ื‘ืงื•ื ืกื•ืœื”:
ื”ื‘ื•ืจืกืงืื™ ื•ื™ืงื˜ื•ืจ ืกืฉื”
ืขื›ืฉื™ื•, ื”ื’ื™ืข ื”ื–ืžืŸ ืœื ืฆืœ ืืช ื”ื›ื•ื— ืฉืœ AOP. ื›ืขืช ืขืœื™ื ื• ืœื™ืฆื•ืจ ืงื•ื‘ืฅ ื”ื™ื‘ื˜ . ื”ื ืžืฉื ื™ ืกื•ื’ื™ื: ืœืจืืฉื•ืŸ ื™ืฉ ืืช ืกื™ื•ืžืช ื”ืงื•ื‘ืฅ .aj . ื”ืฉื ื™ ื”ื•ื ืžื—ืœืงื” ืจื’ื™ืœื” ืฉืžืฉืชืžืฉืช ื‘ื”ืขืจื•ืช ื›ื“ื™ ืœื™ื™ืฉื ื™ื›ื•ืœื•ืช AOP . ื‘ื•ืื• ื ืกืชื›ืœ ืชื—ื™ืœื” ืขืœ ื”ืงื•ื‘ืฅ ืขื ืกื™ื•ืžืช .aj :

public aspect GreetingAspect {
 
  pointcut greeting() : execution(* Main.printName(..));
 
  before() : greeting() {
     System.out.print("Hi, ");
  }
}
ื”ืงื•ื‘ืฅ ื”ื–ื” ื”ื•ื ื“ื™ ื›ืžื• ืžื—ืœืงื”. ื‘ื•ืื• ื ืจืื” ืžื” ืงื•ืจื” ื›ืืŸ: pointcut ื”ื™ื ืงื‘ื•ืฆื” ืฉืœ ื ืงื•ื“ื•ืช ืฆื™ืจื•ืฃ; greeting() ื”ื•ื ื”ืฉื ืฉืœ ื ืงื•ื“ืช ื—ื™ืชื•ืš ื–ื•; : ื‘ื™ืฆื•ืข ืžืฆื™ื™ืŸ ืœื”ื—ื™ืœ ืื•ืชื• ื‘ืžื”ืœืš ื‘ื™ืฆื•ืข ื›ืœ ( * ) ื”ืงืจื™ืื•ืช ืฉืœ ื”ืฉื™ื˜ื” Main.printName(...) . ืœืื—ืจ ืžื›ืŸ ืžื’ื™ืขื” ืขืฆื” ืกืคืฆื™ืคื™ืช - before() - ืฉืžืชื‘ืฆืขืช ืœืคื ื™ ืฉื ืงืจืืช ืฉื™ื˜ืช ื”ืžื˜ืจื”. : greeting() ื”ื™ื ื ืงื•ื“ืช ื”ื—ื™ืชื•ืš ืฉื”ืขืฆื” ื”ื–ื• ืžื’ื™ื‘ื” ืืœื™ื”. ื•ื‘ื›ืŸ, ื•ืœืžื˜ื” ืื ื• ืจื•ืื™ื ืืช ื’ื•ืฃ ื”ืฉื™ื˜ื” ืขืฆืžื”, ืฉื ื›ืชื‘ ื‘ืฉืคืช ื’'ืื•ื•ื”, ืื•ืชื” ืื ื• ืžื‘ื™ื ื™ื. ื›ืฉื ืจื™ืฅ ืืช ื”-main ืขื ื”ื”ื™ื‘ื˜ ื”ื–ื” ื ื•ื›ื—, ื ืงื‘ืœ ืืช ื”ืคืœื˜ ื”ื–ื” ืฉืœ ื”ืžืกื•ืฃ:
ื”ื™ื™, ื˜ืื ืจ ื”ื™ื™, ื•ื™ืงื˜ื•ืจ ื”ื™ื™, ืกืฉื”
ืื ื• ื™ื›ื•ืœื™ื ืœืจืื•ืช ืฉื›ืœ ืงืจื™ืื” ืœืฉื™ื˜ืช printName ืฉื•ื ืชื” ื”ื•ื“ื•ืช ืœื”ื™ื‘ื˜. ืขื›ืฉื™ื• ื‘ื•ืื• ื ืกืชื›ืœ ืื™ืš ื”ื”ื™ื‘ื˜ ื™ื™ืจืื” ื›ืžื—ืœืงืช Java ืขื ื”ืขืจื•ืช:

@Aspect
public class GreetingAspect{
 
  @Pointcut("execution(* Main.printName(String))")
  public void greeting() {
  }
 
  @Before("greeting()")
  public void beforeAdvice() {
     System.out.print("Hi, ");
  }
}
ืื—ืจื™ ืงื•ื‘ืฅ ื”- .aj aspect, ื”ื›ืœ ื”ื•ืคืš ื‘ืจื•ืจ ื™ื•ืชืจ ื›ืืŸ:
  • @Aspect ืžืฆื™ื™ืŸ ืฉืžื—ืœืงื” ื–ื• ื”ื™ื ื”ื™ื‘ื˜;
  • @Pointcut("execution(* Main.printName(String))") ื”ื™ื ื ืงื•ื“ืช ื”ื—ื™ืชื•ืš ื”ืžื•ืคืขืœืช ืขื‘ื•ืจ ื›ืœ ื”ืงืจื™ืื•ืช ืœ- Main.printName ืขื ืืจื’ื•ืžื ื˜ ืงืœื˜ ืฉื”ืกื•ื’ ืฉืœื• ื”ื•ื String ;
  • @Before("greeting()") ื”ื™ื ืขืฆื” ื”ืžื™ื•ืฉืžืช ืœืคื ื™ ืงืจื™ืื” ืœืงื•ื“ ืฉืฆื•ื™ืŸ ื‘ื ืงื•ื“ืช ื”ื—ื™ืชื•ืš ืฉืœ greeting() .
ื”ืคืขืœืช ืจืืฉื™ ืขื ื”ื™ื‘ื˜ ื–ื” ืœื ืžืฉื ื” ืืช ืคืœื˜ ื”ืžืกื•ืฃ:
ื”ื™ื™, ื˜ืื ืจ ื”ื™ื™, ื•ื™ืงื˜ื•ืจ ื”ื™ื™, ืกืฉื”

ื“ื•ื’ืžื” ืžืก' 2

ื ื ื™ื— ืฉื™ืฉ ืœื ื• ืฉื™ื˜ื” ื›ืœืฉื”ื™ ืฉืžื‘ืฆืขืช ืคืขื•ืœื•ืช ืžืกื•ื™ืžื•ืช ืขื‘ื•ืจ ืœืงื•ื—ื•ืช, ื•ืื ื—ื ื• ืงื•ืจืื™ื ืœืฉื™ื˜ื” ื”ื–ื• ืžื”ืจืืฉื™ :

public class Main {
 
  public static void main(String[] args) {
  performSomeOperation("Tanner");
  }
 
  public static void performSomeOperation(String clientName) {
     System.out.println("Performing some operations for Client " + clientName);
  }
}
ื‘ื•ืื• ื ืฉืชืžืฉ ื‘ื‘ื™ืื•ืจ @Around ื›ื“ื™ ืœื™ืฆื•ืจ "ืคืกืื•ื“ื•-ืขืกืงื”":

@Aspect
public class TransactionAspect{
 
  @Pointcut("execution(* Main.performSomeOperation(String))")
  public void executeOperation() {
  }

  @Around(value = "executeOperation()")
  public void beforeAdvice(ProceedingJoinPoint joinPoint) {
     System.out.println("Opening a transaction...");
     try {
        joinPoint.proceed();
        System.out.println("Closing a transaction...");
     }
     catch (Throwable throwable) {
        System.out.println("The operation failed. Rolling back the transaction...");
     }
  }
  }
ืขื ืฉื™ื˜ืช ื”ื”ืžืฉืš ืฉืœ ื”ืื•ื‘ื™ื™ืงื˜ ProceedingJoinPoint , ืื ื• ืงื•ืจืื™ื ืœืฉื™ื˜ืช ื”ื’ืœื™ืฉื” ื›ื“ื™ ืœืงื‘ื•ืข ืืช ืžื™ืงื•ืžื” ื‘ืขืฆื”. ืœื›ืŸ, ื”ืงื•ื“ ื‘ืฉื™ื˜ื” ืฉืœืžืขืœื” joinPoint.proceed(); ื”ื•ื ืœืคื ื™ , ื‘ืขื•ื“ ืฉื”ืงื•ื“ ืฉืžืชื—ืชื™ื• ื”ื•ื ืื—ืจื™ . ืื ื ืจื™ืฅ ืืช main , ื ืงื‘ืœ ืืช ื–ื” ื‘ืงื•ื ืกื•ืœื”:
ืคืชื™ื—ืช ืขืกืงื”... ืžื‘ืฆืขืช ื›ืžื” ืคืขื•ืœื•ืช ืขื‘ื•ืจ Client Tanner ืกื•ื’ืจืช ืขืกืงื”...
ืื‘ืœ ืื ื ื–ืจื•ืง ื•ื—ืจื™ื’ื” ื‘ืฉื™ื˜ื” ืฉืœื ื• (ื›ื“ื™ ืœื“ืžื•ืช ืคืขื•ืœื” ืฉื ื›ืฉืœื”):

public static void performSomeOperation(String clientName) throws Exception {
  System.out.println("Performing some operations for Client " + clientName);
  throw new Exception();
}
ื•ืื– ื ืงื‘ืœ ืืช ื”ืคืœื˜ ื”ื–ื” ืฉืœ ื”ืžืกื•ืฃ:
ืคื•ืชื— ืขืกืงื”... ืžื‘ืฆืข ื›ืžื” ืคืขื•ืœื•ืช ืขื‘ื•ืจ Client Tanner ื”ืคืขื•ืœื” ื ื›ืฉืœื”. ืžื—ื–ื™ืจ ืืช ื”ืขืกืงื” ืœืื—ื•ืจ...
ืื– ืžื” ืฉืกื™ื™ืžื ื• ื›ืืŸ ื”ื•ื ืกื•ื’ ืฉืœ ื™ื›ื•ืœืช ื˜ื™ืคื•ืœ ื‘ืฉื’ื™ืื•ืช.

ื“ื•ื’ืžื” ืžืก' 3

ื‘ื“ื•ื’ืžื” ื”ื‘ืื” ืฉืœื ื•, ื‘ื•ืื• ื ืขืฉื” ืžืฉื”ื• ื›ืžื• ื›ื ื™ืกื” ืœืงื•ื ืกื•ืœื”. ืจืืฉื™ืช, ืชืกืชื›ืœ ืขืœ Main , ืฉื ื”ื•ืกืคื ื• ืงืฆืช ื”ื™ื’ื™ื•ืŸ ืขืกืงื™ ืคืกืื•ื“ื•:

public class Main {
  private String value;
 
  public static void main(String[] args) throws Exception {
     Main main = new Main();
     main.setValue("<some value>");
     String valueForCheck = main.getValue();
     main.checkValue(valueForCheck);
  }
 
  public void setValue(String value) {
     this.value = value;
  }
 
  public String getValue() {
     return this.value;
  }
 
  public void checkValue(String value) throws Exception {
     if (value.length() > 10) {
        throw new Exception();
     }
  }
}
ื‘- main , ืื ื• ืžืฉืชืžืฉื™ื ื‘-setValue ื›ื“ื™ ืœื”ืงืฆื•ืช ืขืจืš ืœืžืฉืชื ื” ืžื•ืคืข ื”ืขืจืš . ืœืื—ืจ ืžื›ืŸ ืื ื• ืžืฉืชืžืฉื™ื ื‘-getValue ื›ื“ื™ ืœืงื‘ืœ ืืช ื”ืขืจืš, ื•ืœืื—ืจ ืžื›ืŸ ืื ื• ืงื•ืจืื™ื checkValue ื›ื“ื™ ืœืจืื•ืช ืื ื”ื•ื ืืจื•ืš ืž-10 ืชื•ื•ื™ื. ืื ื›ืŸ, ืื–ื™ ื™ื•ื˜ืœ ื—ืจื™ื’ื”. ืขื›ืฉื™ื• ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ื”ื”ื™ื‘ื˜ ืฉื‘ื• ื ืฉืชืžืฉ ื›ื“ื™ ืœืจืฉื•ื ืืช ืขื‘ื•ื“ืช ื”ืฉื™ื˜ื•ืช:

@Aspect
public class LogAspect {
 
  @Pointcut("execution(* *(..))")
  public void methodExecuting() {
  }
 
  @AfterReturning(value = "methodExecuting()", returning = "returningValue")
  public void recordSuccessfulExecution(JoinPoint joinPoint, Object returningValue) {
     if (returningValue != null) {
        System.out.printf("Successful execution: method โ€” %s method, class โ€” %s class, return value โ€” %s\n",
              joinPoint.getSignature().getName(),
              joinPoint.getSourceLocation().getWithinType().getName(),
              returningValue);
     }
     else {
        System.out.printf("Successful execution: method โ€” %s, class โ€” %s\n",
              joinPoint.getSignature().getName(),
              joinPoint.getSourceLocation().getWithinType().getName());
     }
  }
 
  @AfterThrowing(value = "methodExecuting()", throwing = "exception")
  public void recordFailedExecution(JoinPoint joinPoint, Exception exception) {
     System.out.printf("Exception thrown: method โ€” %s, class โ€” %s, exception โ€” %s\n",
           joinPoint.getSignature().getName(),
           joinPoint.getSourceLocation().getWithinType().getName(),
           exception);
  }
}
ืžื” ืงื•ืจื” ืคื”? @Pointcut("execution(* *(..))") ื™ืฆื˜ืจืฃ ืœื›ืœ ื”ืงืจื™ืื•ืช ืฉืœ ื›ืœ ื”ืฉื™ื˜ื•ืช. @AfterReturning(value = "methodExecuting()", returning = "returningValue") ื”ื™ื ืขืฆื” ืฉืชื‘ื•ืฆืข ืœืื—ืจ ื‘ื™ืฆื•ืข ืžื•ืฆืœื— ืฉืœ ืฉื™ื˜ืช ื”ืžื˜ืจื”. ื™ืฉ ืœื ื• ื›ืืŸ ืฉื ื™ ืžืงืจื™ื:
  1. ื›ืืฉืจ ืœืžืชื•ื“ื” ื™ืฉ โ€‹โ€‹ืขืจืš ื”ื—ื–ืจื” - if (returningValue! = Null) {
  2. ื›ืฉืื™ืŸ ืขืจืš ื”ื—ื–ืจื” - else {
@AfterThrowing(value = "methodExecuting()", throwing = "exception") ื”ื™ื ืขืฆื” ืฉืชื•ืคืขืœ ื‘ืžืงืจื” ืฉืœ ืฉื’ื™ืื”, ื›ืœื•ืžืจ ื›ืืฉืจ ื”ืฉื™ื˜ื” ื–ื•ืจืงืช ื—ืจื™ื’. ื•ื‘ื”ืชืื ืœื›ืš, ืขืœ ื™ื“ื™ ื”ืคืขืœืช main , ื ืงื‘ืœ ืžืขื™ืŸ ืจื™ืฉื•ื ืžื‘ื•ืกืก ืงื•ื ืกื•ืœื”:
ื‘ื™ืฆื•ืข ืžื•ืฆืœื—: ืฉื™ื˜ื” โ€” setValue, class โ€” ืจืืฉื™ ื‘ื™ืฆื•ืข ืžื•ืฆืœื—: ืฉื™ื˜ื” โ€” getValue, class โ€” ืจืืฉื™, ืขืจืš ื”ื—ื–ืจื” โ€” <ื›ืžื” ืขืจืš> ื ื–ืจืง ื—ืจื™ื’: ืฉื™ื˜ื” โ€” checkValue, class โ€” ื—ืจื™ื’ ืจืืฉื™ โ€” java.lang.Exception ื ื–ืจืง ื—ืจื™ื’: ืฉื™ื˜ื” โ€” main, class - Main, exception - java.lang.Exception
ื•ืžื›ื™ื•ื•ืŸ ืฉืœื ื˜ื™ืคืœื ื• ื‘ื—ืจื™ื’ื™ื, ืขื“ื™ื™ืŸ ื ืงื‘ืœ ืžืขืงื‘ ืžื—ืกื ื™ืช: ืžื” ื–ื” AOP?  ืขืงืจื•ื ื•ืช ืฉืœ ืชื›ื ื•ืช ืžื•ื ื—ื” ื”ื™ื‘ื˜ื™ื - 3ื ื™ืชืŸ ืœืงืจื•ื ืขืœ ื—ืจื™ื’ื™ื ื•ื˜ื™ืคื•ืœ ื‘ื—ืจื™ื’ื™ื ื‘ืžืืžืจื™ื ื”ื‘ืื™ื: ื—ืจื™ื’ื™ื ื‘-Java ื•- Exceptions: catching and treatment . ื–ื” ื”ื›ืœ ื‘ืฉื‘ื™ืœื™ ื”ื™ื•ื. ื”ื™ื•ื ื”ืชื•ื•ื“ืขื ื• ืœ- AOP , ื•ื”ืฆืœื—ืชื ืœืจืื•ืช ืฉื”ื—ื™ื” ื”ื–ื• ืœื ืžืคื—ื™ื“ื” ื›ืžื• ืฉื—ืœืง ืžื”ืื ืฉื™ื ืขื•ืฉื™ื ืื•ืชื”. ืฉืœื•ื ืœื›ื•ืœื!
ื”ืขืจื•ืช
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION